經常在別人的程式中看到類似:
fprintf(stderr,"hello world!\n");
一直沒弄明白,stderr 是在哪兒?查閱資料發現會有以下兩種情況:
1、stderr 在程式指定到乙個檔案的話,那麼程式中所有有關的stderr輸出都是輸出到該指定檔案檔案。
如:freopen("d:\\stderror.txt","w",stderr); 這裡指定輸出到 「d:檔案
2、在執行程式時,用帶有重定向的命令列引數的執行模式,假如 aa.exe 2>stderr.txt
其中的2是代表c語言中三種輸入輸出裝置,0-stdin 1-stdout 2-stderr (預設定向是鍵盤,顯示器,顯示器),這裡2-stderr 重定向了檔案「stderr.txt」。所有stderr將直接輸入到此檔案中。(已測)
ps:假如用了第1種方案,再用第2種,第2種是無效的。因為stderr已經指定過了輸出檔案,不能再次指定,或者說不能覆蓋。
關於cerr;
網上說cerr是無緩衝的,不能在程式中重定向。(未研究)
但是,運用上文2中的方法,同樣是可以實現定向輸出到指定檔案中。(已測)
cerr和cout的區別
std cerr是標準錯誤輸出流,不需要快取,直接顯示在顯示器上,而且只能顯示到顯示器上,即std cerr流不能轉向。std cout需要緩衝區 目的是為了減少螢幕重新整理次數,一次全部顯示 std cout流可以轉向,例如可將cout流流向檔案操作中去。1.區別 cout對應於標準輸出流,預設情...
cout和cerr的區別
問題 c 中輸出通常資訊的函式為cout,比如 std cout hello world 在異常處理機制中則使用cerr來輸出錯誤資訊,比如 std cerr error too many arguments n 那麼,cout和cerr的區別是什麼呢?解決辦法 1.摘錄一段 c primer 第五...
stdout和stderr的趣味問題
includeint main return 0 如果不輸入得到一行,游標停止,如果加換行 但是如果沒有輸入換行,就會得到下列結果 因為stdout會先放在快取區,等錯誤資訊打出,在執行清除快取,所以group最後寫出 如果我們在stdout那一行加上換行就不同了 includeint main g...