相关疑难解决方法(0)

在MSVC 2017下缺少C11 strerrorlen_s功能

我正试图在MSVC 2017下找到C11标准中包含的strerrorlen_s功能头.我需要它来为错误消息分配空间.代码如下:strerror_s

auto size = strerrorlen_s(errno) + 1;
char* errorReason = (char*)alloca(size);
strerror_s(errorReason, size, errno);
std::ostringstream oss;
oss << "Cannot open: " << fileName << " Reason: " << errorReason;
throw std::runtime_error(oss.str());
Run Code Online (Sandbox Code Playgroud)

在文档中有以下字样:

与所有边界检查函数一样,如果__STDC_LIB_EXT1__由实现定义并且用户在包含之前定义__STDC_WANT_LIB_EXT1__整数常量1,则仅保证strerror_s和strerrorlen_s可用string.h.

MSVC 2017没有定义__STDC_LIB_EXT1__,似乎__STDC_WANT_LIB_EXT1__在包含之前定义string.h没有效果.虽然strerror_s可以.

  • strerrorlen_s在现有的WindowsMSVC 2017年
  • 如果函数不可用,是否有可能通过其他方式获取错误消息长度?
  • strerror_sWindows下是否是线程安全的,因为在Linux下它似乎不是并且如果需要线程安全必须使用strerror_r,但它在Windows上不可用?

c++ tr24731 visual-studio

13
推荐指数
1
解决办法
2230
查看次数

标签 统计

c++ ×1

tr24731 ×1

visual-studio ×1