在Debian上,我需要读取一个环境变量,否则返回一个空字符串。这是我的代码:
std::string getEnv(std::string var)
{
char* val = ::getenv(var.c_str());
std::string retVal(val);
return retVal;
}
当找不到环境变量时,我将得到以下错误:
basic_string::_S_construct null not valid error
调试后,当我尝试将空val加载到std::string retVal(val)
时,错误代码将发生在它上。
我想从一个空的char *
加载一个字符串可以工作,但是看不出来。
如何修复上述代码,以便在不存在环境变量的情况下使其工作?
发布于 2018-06-12 09:26:15
来自man getenv
getenv()
函数返回指向环境中值的指针,如果没有匹配,则返回NULL
。
所以你需要解释一下val == NULL
的情况。
std::string getEnv(std::string var)
{
const char* val = ::getenv(var.c_str());
if (val == nullptr)
return std::string("");
return std::string(val);
}
是一种可能的解决方案(如果未找到var,则返回空字符串)。
发布于 2018-06-12 09:37:56
您可以使用string::data()函数来获取缓冲区指针下面的地址。
试试var.c_str()或var.data()。
std::string getEnv(std::string var)
{
char* val = ::getenv(var.data());
std::string retVal(val ? val : "");
return retVal;
}
对我来说是起作用的。
val ? val : ""
以避免将空传递给std::string()
构造函数
https://stackoverflow.com/questions/50813508
复制相似问题