*標準輸入輸出流
#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.