内存故障使用const char *?

时间:2012-04-11 06:00:20

标签: c++ linux environment-variables

您好我在Linux平台上使用C ++,我必须获取环境变量(用户定义)的值并进一步使用它。 以下是我正在使用的代码,

const char *show_line = getenv ("MY_SHOW_LINES");

bool myFlag = (strcmp(show_line, "1") == 0) ? false : true;

当我将环境变量(MY_SHOW_LINES)的值设置为1但是当我取消设置它的值(即取消设置MY_SHOW_LINES)时,上面的代码正确执行。 上面的代码给出了内存故障 对联合国预期行为的任何建议? 提前致谢

2 个答案:

答案 0 :(得分:4)

如果将NULL指针传递给strcmp,则会出现未定义的行为,在这种情况下很可能会发生崩溃。

您是否知道指针可能是NULL,即故意无效?

你应该防范这种可能性:

bool myFlag = false; // set default value
if ( show_line != NULL ) {
    myFlag = ( strcmp(show_line, "1") != 0 ); // "? false : true" same as NOT…
}

答案 1 :(得分:0)

根据手册页,

  

getenv()函数返回指向该值的指针   环境,如果没有匹配则为NULL。

因此,如果它不存在,则返回NULL,这会导致strcmp()的消化问题。