g++ (GCC) 4.6.0 20110419 (Red Hat 4.6.0-5
)C++中的fprint的等價函數
C++中的等價物是什麼?我知道這將在g ++中編譯。但我只是感興趣,看看有沒有其他的C++,我可以這樣使用。
fprintf(stderr, "Server failed to receive message [ %s ]\n", stderror(errno));
非常感謝您的任何建議,
g++ (GCC) 4.6.0 20110419 (Red Hat 4.6.0-5
)C++中的fprint的等價函數
C++中的等價物是什麼?我知道這將在g ++中編譯。但我只是感興趣,看看有沒有其他的C++,我可以這樣使用。
fprintf(stderr, "Server failed to receive message [ %s ]\n", stderror(errno));
非常感謝您的任何建議,
什麼:
std::cerr << "Server failed to receive message [" << stderror(errno)) << "]" << std::endl;
您可以使用輸出流CERR。
cerr << "Server failed to receive message [ " << stderror(errno) << " ]" << endl;
我相信'endl'刷新緩衝區,這對於錯誤消息來說是有用的。這使得這個答案比使用'\ n'的答案更好。 – 2011-04-26 16:46:45
@MarkRansom:無論如何,在每次輸出操作後(默認情況下)都會刷新'cerr',所以'\ n'和'std :: endl'之間的唯一區別無論如何都不重要。 – 2011-04-26 17:04:25
退房cerr在iostream。它像cout,但爲stderr。
#include <iostream>
std::cerr << "Server failed to receive message [ " << stderror(errno) << " ]"
<< std::endl;
或者您可以使用boost::forma t來獲得類型安全的sprintf。
using namespace boost;
std::cerr
<< format("Server failed to receive message [ %s ]") % stderror(errno)
<< std::endl;
+1 for'boost :: format'。您可以直接將'format'對象轉儲到流中。你不需要調用'str()'。 – 2011-04-26 19:58:38
更一般的答案:您可以在流操作符中使用任何istream對象。還有很多其他類型的從istream繼承的對象。例如,fstream對象是一種用於文件I/O的istream。還有sstream(字符串流)對象,它們以類似於sprintf和sscanf的方式使用。
話雖這麼說,我會謹慎使用C++流運營商,而不是的C-當量(也支持C++)。如果您使用C++的,it's going to make internationalization very difficult.
更正後,您完全正確...:) – Macmade 2011-04-26 16:46:52
@johannes,您認爲哪個平臺「\ n」不起作用? – ikegami 2011-04-26 16:53:02
@Macmade:完全正確如何? 'std :: endl'沒有比'\ n'更多或更少的平臺依賴。 – 2011-04-26 17:02:16