`std :: string(strerror(errno))`危险吗?

Sta*_*ked 3 c c++

在我的代码中的某些地方,我打印这样的调试消息:

int ret = getLinkSpeed(device.getSysName(), linkSpeed);
if (ret < 0)
{
    logDebug("Failed to obtain port speed for this device. Error: " + std::string(strerror(errno)));
}
Run Code Online (Sandbox Code Playgroud)

文档中可以看出,在某些情况下strerror是否会返回0并不完全清楚(这会导致我的代码崩溃).有谁知道它是否安全?

小智 11

为什么不编写一个函数来执行此操作:

string ErrStr() {
   char * e = strerror(errno);
   return e ? e : "";
}
Run Code Online (Sandbox Code Playgroud)

这很容易使用,自我记录,可以适应重新格式化输出,并涵盖strerror()可能返回NULL的可能性(我不知道它是否可以).

  • 我会 return e?e:"unknown error"; 至少包含此类错误描述的消息不会看起来不完整。 (2认同)

Nik*_*kko 5

如果您使用多线程应用程序,则可能会遇到问题。在这种情况下,您需要使用strerror_r