我想做的是获取环境变量值并将其用于代码本身。
我想做的是(将变量设置为export UTMZONE="33T"
):
char UTMZone[4] = getenv("UTMZONE");
因此我收到以下错误:
error: array must be initialized with a brace-enclosed initializer
我认为问题在于混合类型,但是我不知道我必须进行哪种转换。
答案 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检查