5

我看到Visual C++ 2008 不再支持strerror_r (...) API,可能是因为线程安全问题。我想在我的程序中使用类似的功能。是否还有其他与 strerror_r(..) 功能相同的 winapi?

4

2 回答 2

8

你可以试试strerror_s。它似乎是线程安全的。

注意strerror_s的参数顺序与strerror_r不同。如果编写可移植代码,您可能需要使用定义

#define strerror_r(errno,buf,len) strerror_s(buf,len,errno)
于 2012-07-30T10:22:09.587 回答
0

我看到 Visual C++ 2008 不再支持 strerror_r(...) API,可能是因为线程安全问题

我不相信它曾经得到支持。该链接指向 MKS Toolkit 而不是 Visual C++ 2008 的文档。 strerror_r 函数的存在是一个线程安全的 strerror。微软的 URL 有快速生锈的趋势,但今天,https: //docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strerror-strerror-wcserror-wcserror?view=vs- 2019 暗示vanilla strerror 在 Windows 上是线程安全的,具有:

所有这些函数都返回一个指向错误消息字符串的指针,该指针位于运行时拥有的线程本地存储缓冲区中。稍后对同一线程的调用可以覆盖此字符串。

所以没有必要在 Windows 上使用 strerror_r 。

于 2020-08-04T23:33:50.407 回答