我知道我们可以用
perror()在C中打印错误。我只是想知道是否有C++替代它,或者我是否必须在我的程序中包含这个(因此stdio.h)。我尽量避免使用更多的C函数。
发布于 2010-07-24 01:47:57
你可以这样做:
std::cerr << strerror(errno) << std::endl;这仍然会调用strerror,所以您实际上只是用一个C函数替换了另一个C函数。它确实允许你通过流编写,而不是混合C和C++输出,这通常是一件好事。至少AFAIK,C++没有向库中添加任何东西来替代strerror (除了生成std::string之外,我不确定它会对strerror有什么改变)。
发布于 2010-07-24 02:08:20
您可以使用boost::system_error::error_code类。
#include <boost/system/system_error.hpp>
#include <cerrno>
#include <iostream>
void
PrintError(
const std::string& message,
int error
)
{
std::cerr << message << ": " <<
boost::system::error_code(
error,
boost::system::get_system_category()
).message()
<< std::endl;
}
int
main()
{
PrintError( "something went wrong!", EINVAL );
return 0;
}这有点冗长,如果您还没有使用boost_system库,那么就有点过分了。
发布于 2021-12-12 08:43:58
对于C++11,我们有标头,因此您应该能够使用:
std::error_code{errno, std::generic_category()}.message();示例程序:
#include <system_error>
#include <iostream>
int main() {
std::cout << std::error_code{errno, std::generic_category()}.message() << '\n';
}这是prints Success。
另请参阅:
(关于使用generic_category还是system_category)
https://stackoverflow.com/questions/3320898
复制相似问题