0

嗨,我在 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)时,上面的代码可以正确执行。上面的代码给出了内存故障。关于上述联合国预期行为的任何建议?提前致谢

4

2 回答 2

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…
}
于 2012-04-11T06:02:52.187 回答
0

根据手册页,

getenv() 函数返回一个指向环境中值的指针,如果不匹配,则返回 NULL。

因此,如果它不存在,它会返回NULL,这会导致strcmp().

于 2012-04-11T06:03:06.287 回答