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.

發佈了27 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章