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

posted @   KingOfFreedom  阅读(3572)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示