va_list用法---隐含参数的使用方法及IO使用说明
目的:
掌握VA_LIST用法
熟悉输入/出的实质,要建立起IO的概念,避免输入出停留在终端阶段
设计到IO设备,便一点设计到 阻塞、非阻塞、多路转换 信号驱动 异步控制等
如果设计到文件操作,需要注意 文件锁
#include<stdio.h>
#include<stdarg.h>
int sum(int n,...)//简单求和的一个函数,n为需要求和的个数
{
int sum=0;
int i;
va_list va;
va_start(va,n);
for(i=0;i<n;i++)
sum+=va_arg(va,int);
va_end(va);
return sum;
}
int main()
{
printf("%d/n",sum(3,1,2,3));//简单测试
return 0;
}
vfprintf
函数名: vfprintf
功 能: 格式化的数据输出到指定的数据流中
用 法: int vfprintf(FILE *stream, char *format, va_list param);
函数说明:vfprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束(‘/0’)为止。
关于参数format字符串的格式请参 考printf()。
返回值:成功则返回实际输出的字符数,失败则返回-1,错误原因存于errno中。
#include
#include
#include
FILE *fp;
int vfpf(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";
fp = tmpfile();
if (fp == NULL)
{
perror("tmpfile() call");
exit(1);
}
vfpf("%d %f %s", inumber, fnumber, string);
rewind(fp);
fscanf(fp,"%d %f %s", &inumber, &fnumber, string);
printf("%d %f %s/n", inumber, fnumber, string);
fclose(fp);
return 0;
}