gpt4 book ai didi

visual-c++ - "getenv... function ... may be unsafe"- 真的吗?

转载 作者:行者123 更新时间:2023-12-04 14:39:03 26 4
gpt4 key购买 nike

我正在使用 MSVC 编译一些使用标准库函数的 C 代码,例如 getenv() , sprintf和其他人,与 /W3设置为警告。 MSVC 告诉我:

'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS



问题:
  • 为什么这在理论上是不安全的——而不是在其他平台上使用?
  • 在实践中在 Windows 上不安全吗?
  • 假设我没有编写面向安全的代码 - 我应该禁用这个警告还是实际上开始为一堆标准库函数设置别名?
  • 最佳答案

    getenv()可能不安全,因为对同一函数的后续调用可能会使先前返回的指针无效。因此,使用如

    char *a = getenv("A");
    char *b = getenv("B");
    /* do stuff with both a and b */

    可能会损坏,因为无法保证 a那个时候还是可以用的。

    getenv_s() - 自 C11 起在 C 标准库中可用 - 通过立即将值复制到调用者提供的缓冲区中来避免这种情况,调用者可以完全控制缓冲区的生命周期。 dupenv_s()通过让调用者负责管理已分配缓冲区的生命周期来避免这种情况。

    但是, getenv_s 的签名有点有争议,该函数甚至可能在某个时候从 C 标准中删除...参见 this report .

    关于visual-c++ - "getenv... function ... may be unsafe"- 真的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48568707/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com