stdin,stdout,stderr
*標準輸入輸出流
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
//man
1.stdin
*0; //標準檔案描述符;
*標準輸入流;
2.stdout
*1;
*標準輸出流;
3.stderr
*2;
*標準錯誤輸出流
++++++++++(extend)
1.//man
Each of these symbols is a stdio(3) macro of type pointer to FILE,
and can be used with functions like fprintf(3) or fread(3).
2.//csdn
stderr與stdin,stdout一樣,是流。
具體就是:
stdin是標準輸入流,預設為鍵盤,
stdout是標準輸出流,預設為螢幕,
stderr是標準錯誤流,一般把螢幕設為預設, 也可以輸出到檔案。
3.//csdn
stdin,stdout可以重定向到檔案,stderr輸出到螢幕;
所以如果輸出錯誤訊息,不要用printf("error"),fprintf(stdout, "error");
這是 因為訊息可能會被重定向到檔案;
要用fprintf(stderr, "error");
4.//百度知道
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!
5.//csdn
c的話,錯誤處理函式有assert,clearerr,dosexterr,ferror,harderr,hardresume,matherr,perror,strerror
舉個strerror的例子
#include <stdio.h>
#include <errno.h>
int main( void )
{
char *buffer;
/*傳一個表示檔案不存在的ENOENT給strerror函式*/
buffer = strerror(ENOENT);
/*輸出該ENOENT代表的錯誤資訊*/
printf("The error is :%s",buffer);
return 0;
}
執行結果:
The error is :NO such file or directory
6.//百度知道
請問:
當檔案指標fp返回NULL值而要提示出錯資訊時,
為什麼用fprintf(stderr,"Error");比用printf("Error");更好?
越詳細越好!謝謝各位了!
提問者: Wave_Dan - 書生 二級
最佳答案
一般情況下,你這兩個語句執行的結果是相同的,沒有區別,只有一下情況才有區別:
執行你的程式的時候,命令列上把輸出結果進行的轉向,比如使用下面的命令把你的程式a.c執行的結果轉向到記事本檔案a.txt:
a.exe > a.txt
在這樣的情況,如果使用printf輸出錯誤資訊,會儲存到a.txt檔案裡面,如果使用fprintf輸出錯誤,會顯示在螢幕上。
7.csdn
stderr,stdout
都是向終端輸出資料。
stderr,可以在編譯階段輸出。
stdout必須時在執行時刻。
8.