我注意到MS编译器给出了cstdlib类似函数的"弃用"警告getenv.MS已经发明了自己的标准,如_dupenv_s.
AFAIK主要的"不安全"的事情是关于重入*.由于MS的CRT被标记为"多线程"(/MT),为什么它们不能替换getenv为可重入,线程安全的版本?是否有人会依赖不安全的行为?
我用GCC编译了相同的代码,g++ -Wall -Wextra -Weff++ -pedantic foo.cpp并没有产生任何警告.所以我猜这不是POSIX的问题?这是怎么解决的?(好吧也许他们只是改变了行为getenv,很高兴得到这个确认).
*说它只是关于重入是一种过于概括的说法.当然,我们有类似的东西strncpy_s可以完全改变签名并处理缓冲区大小.但并没有改变这个问题的核心