下面浅谈printf,fprintf,sprintf三个函数的使用和区别
scanf、fscanf、sscanf三个函数的用法和区别传送门
函数参数
三个函数头文件都是stdio.h
显然
fprintf只比printf多了一个FILE的指针
sprintf只比printf多了一个char的指针
fprintf的使用
fscanf是读文件的,那对应的fprintf当然是写文件的了
fprintf可以把数据写入文件中,借助的是第一个参数(FILE*的指针)
fprintf比printf也只多了一个FILE*指针,后面两个参数和printf一样写就行
看下面一段代码
struct S
{
char name[20];
int age;
char sex[20];
};
int main()
{
struct S s = { "ccl", 19, "boy" };//初始化结构体作为写入文件的内容
//打开文件
FILE* pf = fopen("D:\\test.txt", "w");//"w"写文件
if (pf == NULL)
{
perror("fopen");
return 1;
}
fprintf(pf, "%s %d %s", s.name, s.age, s.sex);//把数据写入文件
fclose(pf);//关闭文件
pf = NULL;//置空
return 0;
}
运行结果
注:"w"写之前会清空文件里的内容
fprintf的作用:
官方一点:发送格式化输出到流 stream 中
简单一点:把数据写入文件(但是文件流不只是文件,c++可以定义文件流,所以只是浅谈)
标准输入流和标准输出流都属于文件流的一种
那么下面的代码可不可以等同呢?
int a=10;
//??是否成立
fprintf(stdout,"%d",a)==printf("%d",a);
//??是否成立
测试代码:
int main()
{
int a = 10;
fprintf(stdout,"%d\n", a);
printf("\n");
printf("%d\n", a);
return 0;
}
运行结果:
显然是可以等同的
下面多看几段代码找找感觉,建议自己试试,左边是代码,右边是运行后的结果
sprintf的使用
sprintf只比printf多了一个char* 的指针,后面两个参数和printf一样写就行
sprintf的作用:
官方点: sprintf的作用是将一个格式化的字符串输出到一个目的字符串中
参数里的buffer指针就是指向目的字符串的
简单点:把数据输出到一个字符串
看下面几个例子就清晰了
整型1234被格式化后放进了数组a中
字符串abcdef放入数组a中
总结
printf是将格式化输出到屏幕,fprintf和sprintf输出的去处不同而已
fprintf的去处是文件,sprintf的去处则是字符串
从这个角度就可以理解为什么fprintf的第一个参数是FILE的指针,而sprintf的第一个参数是char的指针
如果有启发的话,留个赞再走吧,这对我帮助很大!
不点?