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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM