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]   ...   );

原文地址:https://www.cnblogs.com/KingOfFreedom/p/2805289.html