2011-04-26 38 views
2

g++ (GCC) 4.6.0 20110419 (Red Hat 4.6.0-5C++中的fprint的等價函數

C++中的等價物是什麼?我知道這將在g ++中編譯。但我只是感興趣,看看有沒有其他的C++,我可以這樣使用。

fprintf(stderr, "Server failed to receive message [ %s ]\n", stderror(errno)); 

非常感謝您的任何建議,

回答

4

什麼:

std::cerr << "Server failed to receive message [" << stderror(errno)) << "]" << std::endl; 
+0

更正後,您完全正確...:) – Macmade 2011-04-26 16:46:52

+3

@johannes,您認爲哪個平臺「\ n」不起作用? – ikegami 2011-04-26 16:53:02

+1

@Macmade:完全正確如何? 'std :: endl'沒有比'\ n'更多或更少的平臺依賴。 – 2011-04-26 17:02:16

2

您可以使用輸出流CERR。

cerr << "Server failed to receive message [ " << stderror(errno) << " ]" << endl;

+0

我相信'endl'刷新緩衝區,這對於錯誤消息來說是有用的。這使得這個答案比使用'\ n'的答案更好。 – 2011-04-26 16:46:45

+0

@MarkRansom:無論如何,在每次輸出操作後(默認情況下)都會刷新'cerr',所以'\ n'和'std :: endl'之間的唯一區別無論如何都不重要。 – 2011-04-26 17:04:25

5

退房cerriostream。它像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; 
+0

+1 for'boost :: format'。您可以直接將'format'對象轉儲到流中。你不需要調用'str()'。 – 2011-04-26 19:58:38

1

更一般的答案:您可以在流操作符中使用任何istream對象。還有很多其他類型的從istream繼承的對象。例如,fstream對象是一種用於文件I/O的istream。還有sstream(字符串流)對象,它們以類似於sprintf和sscanf的方式使用。

話雖這麼說,我會謹慎使用C++流運營商,而不是的C-當量(也支持C++)。如果您使用C++的,it's going to make internationalization very difficult.