stderr和stdout詳細解說

2021-08-20 03:51:24 字數 1878 閱讀 5307

今天又查了一下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 );

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

好了,以上到此為止。

然後深挖stdoutstderr

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

今天時間倉促,以下摘自

十分感謝)

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

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

int main()

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

world!hello

這是為什麼呢?在預設情況下,stdout是行緩衝的,他的輸出會放在乙個buffer裡面,只有到換行的時候,才會輸出到螢幕。而stderr是無緩衝的,會直接輸出,舉例來說就是printf(stdout, "***x") 和 printf(stdout, "***x\n"),前者會憋住,直到遇到新行才會一起輸出。而printf(stderr, "***xx"),不管有麼有\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點即可!

stderr和stdout詳細解說

今天又查了一下fprintf,其中對第乙個引數stderr特別感興趣。int fprintf file stream,char format,argument 在此之前先區分一下 printf,sprintf,fprintf。1,printf就是標準輸出,在螢幕上列印出一段字串來。2,sprintf...

stderr和stdout詳細解說

int fprintf file stream,char format,argument 在此之前先區分一下 printf,sprintf,fprintf。1,printf就是標準輸出,在螢幕上列印出一段字串來。2,sprintf就是把格式化的資料寫入到某個字串中。返回值字串的長度。3,fprint...

stdout和stderr的趣味問題

includeint main return 0 如果不輸入得到一行,游標停止,如果加換行 但是如果沒有輸入換行,就會得到下列結果 因為stdout會先放在快取區,等錯誤資訊打出,在執行清除快取,所以group最後寫出 如果我們在stdout那一行加上換行就不同了 includeint main g...