【发布时间】:2021-02-07 16:43:49
【问题描述】:
我尝试做一个简单的任务并在 Linux 和 Windows 中获取环境变量 所有文档都指向使用:std::getenv 但是当我使用 Visual Studio 2019 在 Windows 10 中运行编译时,我得到了:
error C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS
这是函数:
std::string Utils::getEnvVar(std::string const& key)
{
char* val = std::getenv(key.c_str());
return val == NULL ? std::string("") : std::string(val);
}
我只找到了这个thread,我不明白跨平台解决方案是什么。
【问题讨论】:
-
如果您更一般地搜索错误消息,而不明确指定
getenv,那么您应该会获得更多关于“问题”和可能解决方案的点击。作为一种快速解决方法,错误消息本身包含有关如何禁用警告的提示。 -
MS VS2019 不喜欢一些旧的 C 调用,访问原始指针和缓冲区等。他们有一个观点:可能会错误地使用它并在您的程序中创建一个后门,从而有可能被利用。所以你必须让 VS 相信你真的想使用它。
-
见this评论“为什么”
-
在 Windows 上,使用
GetEnvironmentVariableW。创建第三个函数,将其在 Windows 上和getenv在 Linux 上包装到一个通用接口中。
标签: c++ cross-platform visual-studio-2019