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