在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 *
中加载一个字符串会起作用,但是看不到。
如何修复上述代码,以便在环境变量不存在的情况下使其正常工作?
答案 0 :(得分:6)
来自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,则返回空字符串)。
答案 1 :(得分:0)
您可以使用string::data()函数来获取underling buffer指针的地址。
尝试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 : ""
以避免将NULL传递给std::string()
构造函数