我有一个案例,我必须将std :: string设置为NULL。代码是这样的:
const std::string variable = "HOME";
const std::string str = getenv(variable.c_str());
问题是,getenv()
如果找不到环境变量则返回NULL,因为我们不能将std :: string设置为NULL
值,我们必须为它分配一个空字符串。
一个选项是:
const std::string str = (getenv(variable.c_str()) == NULL ? "" : getenv(variable.c_str()));
只是它两次调用getenv()。
达到此结果的最佳做法是什么?
答案 0 :(得分:5)
std::string string_from_char_array(const char* str)
{
return str ? str : "";
}
然后将其称为
const std::string str = string_from_char_array(getenv(variable.c_str()));
答案 1 :(得分:3)
达到此结果的最佳做法是什么?
自己滚动(包裹它):
std::string safe_getenv(const std::string& var)
{
auto env = getenv(var.c_str());
return env ? std::string{env} : std::string{};
}
auto result = safe_getenv("blah");
答案 2 :(得分:0)
只是它两次调用getenv()。
达到此结果的最佳做法是什么?
您可以通过将getenv()的结果分配给auto
这样的变量来避免调用它两次
auto var = getenv(variable.c_str();
const std::string str = (var == NULL ? "" : var);
希望它可以帮助你:)