c++ - 为什么我不能使用 strerror?

标签 c++ c deprecated

我正在将一些代码移植到 Windows,Microsoft 编译器 (Visual C++ 8) 告诉我 strerror() 不安全。

撇开微软提供的所有安全字符串中的烦恼因素不谈,我实际上可以看到一些已弃用的函数是危险的。但我不明白 strerror() 有什么问题。它接受一个代码 (int),并返回相应的字符串,如果该代码未知,则返回空字符串。

危险在哪里?

C 中有没有好的替代方法?

C++ 中有没有好的替代方案?

[编辑]

已经得到了一些好的答案,现在了解到某些实现可能已经疯狂到实际写入公共(public)共享缓冲区 - 在单线程中重入是不安全的,更不用说线程之间了! - 我的问题不再是“为什么我不能使用它,还有什么替代方案?”到“C 和/或 C++ 中是否有任何体面、简洁的替代方案?”

提前致谢

最佳答案

strerror 已被弃用,因为它不是线程安全的。 strerror 在内部静态缓冲区上工作,该缓冲区可能会被其他并发线程覆盖。您应该使用名为 strerror_s 的安全变体。

安全变体要求将缓冲区大小传递给函数,以便在写入之前验证缓冲区是否足够大,这有助于避免可能导致恶意代码执行的缓冲区溢出。

关于c++ - 为什么我不能使用 strerror?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900338/

相关文章:

c++ - 从给定的符号、尾数和指数构造 float ( double )的宏或函数?

c++ - 如何在 C++ 中从十六进制字符串输出 Unicode 字符?

c++ - 适用于不同字符编码的模板 ToString 函数

c - 逗号运算符 , 的作用是什么?

c++ - 从静态构造函数代码调用时 pthread 库失败

Ember.js 2.0 - 在一次渲染弃用警告中修改属性两次

c++ - 打印 cvMat channel

c - 如何在不使用 '+' 运算符的情况下添加两个变量?

php - php 中已弃用的函数 create_function

python - 基于密度的散点图中的颜色点