stderr和stdout詳細解說

今天又查了一下fprintf,其中對第一個參數stderr特別感興趣。

int fprintf(FILE *stream,char *format,[argument]);

在此之前先區分一下:printf,sprintf,fprintf。

1,printf就是標準輸出,在屏幕上打印出一段字符串來。

2,sprintf就是把格式化的數據寫入到某個字符串中。返回值字符串的長度。

3,fprintf是用於文件操作。

      原型:int fprintf(FILE *stream,char *format,[argument]);       

      功能:fprintf()函數根據指定的format(格式)發送信息(參數)到由stream(流)指定的文件.因此fprintf()可以使得信息輸出到指  定的文件。

     例子:

 char name[20] = "lucy"; 

   FILE *out;
    out = fopen( "output.txt", "w" );
    if( out != NULL )
    fprintf( out, "Hello %s\n", name );

    返回值:若成功則返回輸出字符數,若輸出出錯則返回負值。

好了,以上到此爲止。

然後深挖stdout,stderr。

stdout, stdin, stderr的中文名字分別是標準輸出,標準輸入和標準錯誤。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////今天時間倉促,以下摘自

http://blog.sina.com.cn/s/blog_912673ce01013qq9.html(十分感謝)

1,我們知道,標準輸出和標準錯誤默認都是將信息輸出到終端上,那麼他們有什麼區別呢?讓我們來看個題目:

問題:下面程序的輸出是什麼?(intel筆試2011)

int main(){
fprintf(stdout,"Hello ");
fprintf(stderr,"World!");
return0;
}

解答:這段代碼的輸出是什麼呢?你可以快速的將代碼敲入你電腦上(當然,拷貝更快),然後發現輸出是

World!Hello

這是爲什麼呢?在默認情況下,stdout是行緩衝的,他的輸出會放在一個buffer裏面,只有到換行的時候,纔會輸出到屏幕。而stderr是無緩衝的,會直接輸出,舉例來說就是printf(stdout, "xxxx") 和 printf(stdout, "xxxx\n"),前者會憋住,直到遇到新行纔會一起輸出。而printf(stderr, "xxxxx"),不管有麼有\n,都輸出。

2,fprintf(stderr, "Can't open it!\n"); 
fprintf(stdout, "Can't open it!\n"); 
printf("Can't open it!\n"); 

這3句效果不是一樣啊,有什麼區別嗎?

有區別。 
stdout -- 標準輸出設備 (printf("..")) 同 stdout。 
stderr -- 標準錯誤輸出設備 
兩者默認向屏幕輸出。 
但如果用轉向標準輸出到磁盤文件,則可看出兩者區別。stdout輸出到磁盤文件,stderr在屏幕。 

例如: 
my.exe 
Can't open it! 
Can't open it! 
Can't open it! 

轉向標準輸出到磁盤文件tmp.txt 
my.exe > tmp.txt 
Can't open it! 

用TYPE 看 tmp.txt的內容: 
TYPE tmp.txt 
Can't open it! 
Can't open it!

總結:注意1,點,2點即可!

 

https://www.cnblogs.com/zhangyabin---acm/p/3203745.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章