C ++环境变量

时间:2018-10-08 13:11:29

标签: c++ types environment-variables

我想做的是获取环境变量值并将其用于代码本身。

我想做的是(将变量设置为export UTMZONE="33T"):

char UTMZone[4] = getenv("UTMZONE");

因此我收到以下错误:

error: array must be initialized with a brace-enclosed initializer

我认为问题在于混合类型,但是我不知道我必须进行哪种转换。

2 个答案:

答案 0 :(得分:7)

getenv返回一个char*。无法通过char[N]初始化char*。您需要做的是捕获指针,然后将字符串复制到数组中,例如

char UTMZone[4];
char* ret = getenv("UTMZONE");
if (ret)
    strncpy(UTMZone, ret, 4);
else
    // abort

也就是说,如果可以使用std::string,则可以从char*构造。使用

char* ret = getenv("UTMZONE");
if (ret)
    std::string UTMZone = ret;
else
    // abort

为您提供一个由环境变量填充的字符串。如果需要将其传递给需要char*const char*的对象,则可以分别使用data()c_str()成员函数。看起来像

function_that_needs_char_star(UTMZone.data());
function_that_needs_const_char_star(UTMZone.c_str());

答案 1 :(得分:3)

如果您真的想使用一个char数组并且确定只需要UTMZONE的前三个字符,则可以使用以下方法:

char* envptr = std::getenv("UTMZONE");
if(envptr){ // check the pointer isn't null
  char UTMZone[4];

  // set null terminator
  UTMZone[4] = '\0';

  // copy 3 chars as the null terminator is already there
  std::strncpy(UTMZone, 3, envptr);
}

您应该真正使用字符串而不是char [],因为这样更安全。


编辑:内森既更快又更有说服力:(

编辑:调整为使用strncpy而不是strcpy并添加了NULL检查