va_start、va_end、va_arg、va_list、fprintf、 vfprintf用法解释

今天有个需求写文件,所有研究了一下标题的函数:
首先要使用va_start等这些方法需要包含头文件:

#include<stdarg.h>

直接上代码说明:

int MyWriteFile(char *format, ...)
{
	va_list paramList;
	char *para;
	//va_start函数来获取参数列表中的参数, 使paramList指向第一个可选参数
	va_start(paramList, format);

	FILE* pFile = fopen("123.txt", "a");
	while (1)   
	{   
		//va_arg返回参数列表中的当前参数并使paramList指向参数列表中的下一个参数, 而para则是获取的参数
		para = va_arg(paramList, char *);
		//这里做判断,是因为我在传参数的时候给了"",做完退出循环的条件
		if (strcmp( para, "") == 0)   
			break;  
		//以"MAX:%d  MIN:%d  str:%s " 的格式写入文件
		fprintf(pFile, "MAX:%d  MIN:%d  str:%s \n", INT_MAX, INT_MIN, para);
	}
	//其实就把format的第一个内容写到文件中
	//vfprintf(pFile, format, paramList);

	//va_end把paramList指针清为NULL
	va_end(paramList);
	return 0;
}

主函数:

int main()
{
	MyWriteFile("DEMO", "This", "is", "a", "demo!", "");
	return 0;
}

结果:

MAX:2147483647  MIN:-2147483648  str:This 
MAX:2147483647  MIN:-2147483648  str:is 
MAX:2147483647  MIN:-2147483648  str:a 
MAX:2147483647  MIN:-2147483648  str:demo! 

如果vfprintf这句打开注释,结果为:

MAX:2147483647  MIN:-2147483648  str:This 
MAX:2147483647  MIN:-2147483648  str:is 
MAX:2147483647  MIN:-2147483648  str:a 
MAX:2147483647  MIN:-2147483648  str:demo! 
DEMO

下面代码主要是va_start 、va_list,va_end, vfprintf
主要是vfprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束(‘\0’)为止

FILE *fp = fopen("123.txt", "a");;
int VfpDemo(char *fmt, ...)
{
	va_list argptr;
	int cnt;
	va_start(argptr, fmt);
	cnt = vfprintf(fp, fmt, argptr);
	va_end(argptr);
	return(cnt);
}
int main(void)
{
	int inumber = 30;
	float fnumber = 90.0;
	char string[4] = "abc";
	if (fp == NULL)
	{
		exit(1);
	}
	VfpDemo("%d %f %s", inumber, fnumber, string);
	fclose(fp);
	return 0;
}

运行结果:

30 90.000000 abc
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值