ein*_*ica 5 crt compiler-warnings visual-c++ getenv c-standard-library
我正在使用MSVC来编译一些C代码,这些代码使用标准库函数,例如和其他函数getenv()
,sprintf
并/W3
设置了警告.MSVC告诉我:
'getenv':此函数或变量可能不安全.请考虑使用_dupenv_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS
问题:
小智 7
getenv()
可能不安全,因为后续对同一函数的调用可能使先前返回的指针无效.结果,用法如
char *a = getenv("A");
char *b = getenv("B");
/* do stuff with both a and b */
Run Code Online (Sandbox Code Playgroud)
可能会破裂,因为a
在那一点上仍然无法保证.
getenv_s()
通过立即将值复制到调用者提供的缓冲区来避免这种情况,调用者可以完全控制缓冲区的生命周期.dupenv_s()
通过使调用者负责管理分配的缓冲区的生命周期来避免这种情况.