有条件地设置std :: string

时间:2014-06-12 13:15:11

标签: c++

我有一个案例,我必须将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()。

达到此结果的最佳做法是什么?

3 个答案:

答案 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);
 
希望它可以帮助你:)