fprintf、fflush(stdout)、printf、sprintf与fprintf 的用法区分
1: fprintf:
fprintf是用于文件操作的,原型是int fprintf( FILE *stream, const char *format [, argument ]...);fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件。fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
char name[20] = "Mary";
FILE *out;
out = fopen( "output.txt", "w" );//若不存在该文件,则将在应用程序目录下新建一个文件
if( out != NULL )
fprintf( out, "Hello %s\n", name );
对于其输出格式参数,和printf()一样.
fprintf也可以输出到屏幕而非文件中:printf(...)=fprintf(stdout,...).
stdout是标准输出设备的文件句柄宏定义
printf其实就是fprintf的第一个参数设置为stdout
你可以理解为它就是一个文件,而这个文件和标准输出设备(屏幕)建立了某种关联,当数据写到这个文件里面的时候,屏幕就会通过既定的方式把你写进去的东西显示出来
2:fflush(stdout):
表头文件:#include <stdio.h>
定义函数:int fflush(FILE *stream)
函数说明:fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数stream为NULL, fflush()会将所有打开的文件数据更新。
返回值 :成功则返回0, 失败返回EOF, 错误代码存于errno中
用途:在使用多个输出函数连续进行多次输出时,有可能发现输出错误。因为下一个数据在上一个数据还没输出完毕,还在输出缓冲区中时,下一个printf就把另一个数据加入输出缓冲区,结果冲掉了原来的数据,出现输出错误。 在 printf()后加上fflush(stdout); 强制马上输出,例子:
#include<stdio.h>
#include<unistd.h>//unix环境
int main()
{
printf("hello");
fflush(stdout);
fork();//fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事
return 0;
}
这样输出一个hello
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("hello");
// fflush(stdout);
fork();
return 0;
}
这样会输出两个hello
3:printf、sprintf与fprintf 的用法区分:该部分引自:文章转自:http://www.cnblogs.com/stli/admin/EditArticles.aspx
1.printf 是和标准输出文件(stdout)关联的,fprintf 则没有这个限制.
2.fprintf是用于文件操作的,原型是int fprintf( FILE *stream, const char *format [, argument ]...);
3.sprintf是格式化输出到一个字符串,fprintf是格式化输出到一个stream,通常是到文件。
int fprintf( FILE *stream, const char *format [, argument ]...);
int sprintf( char *buffer, const char *format [, argument] ... );