問題:
c++中輸出通常資訊的函式為cout,比如:std::cout << "hello world";
在異常處理機制中則使用cerr來輸出錯誤資訊,比如:std::cerr << "error: too many arguments\n";
那麼,cout和cerr的區別是什麼呢?
解決辦法:
1. 摘錄一段《c++ primer》第五版p319中關於cout與cerr的區別的描述:
和cout一樣,cerr也是乙個ostream物件。
它們之間的區別在於:
重定向操作只影響cout,而不影響cerr;
cerr物件僅用於錯誤訊息。
因此,如果將程式輸出重定向到檔案,並且發生了錯誤,則螢幕上仍然會出現錯誤訊息。
在unix系統中,可以分別對cout和cerr進行重定向,命令列操作符》用於對cout進行重定向,操作符2>對cerr進行重定向。
因為,系統的shell裡一般約定1為正確流,2為錯誤流。而1是作為預設值使用可以省略不寫。
2. 示例**:
# test_cerr.cpp
#include using namespace std;
int main()
編譯test_cerr.cpp:
g++ test_cerr.cpp -o test_cerr
執行不同的重定向命令:
u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ ./test_cerr 2> test_cerr.txt
hello world---cout
u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ ./test_cerr > test_cout.txt
hello world---cerr
u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ cat ./test_cerr.txt
hello world---cerr
u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ cat ./test_cout.txt
hello world---cout
u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$
cerr和cout的區別
std cerr是標準錯誤輸出流,不需要快取,直接顯示在顯示器上,而且只能顯示到顯示器上,即std cerr流不能轉向。std cout需要緩衝區 目的是為了減少螢幕重新整理次數,一次全部顯示 std cout流可以轉向,例如可將cout流流向檔案操作中去。1.區別 cout對應於標準輸出流,預設情...
C 中cout和cerr的區別
之前一直在用,但就是沒在意兩者到底有啥卻別,今天又想到這個問題,總結下吧 以下的內容均是本人從網上查閱資料看來整理的,暫時還沒有查閱官方資料,不保證準確,歡迎討論 其實大家平常常會用的主要有三個 cout cerr clog,首先簡單介紹下三者。這三者在c 中都是標準io庫中提供的輸出工具 至於有關...
c 中cout和cerr的區別
其實大家平常常會用的主要有三個 cout cerr clog,首先簡單介紹下三者。這三者在c 中都是標準io庫中提供的輸出工具 至於有關的過載問題在此不討論 cout 寫到標準輸出的ostream物件 cerr 輸出到標準錯誤的ostream物件,常用於程式錯誤資訊 clog 也是輸出標準錯誤流 這...