【问题标题】:Memory fault with the use of const char*?使用 const char* 时出现内存错误?
【发布时间】:2012-04-23 10:43:45
【问题描述】:
您好,我在 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),上面的代码可以正确执行。
上面的代码给出了内存故障。
关于上述联合国预期行为的任何建议?
提前致谢
【问题讨论】:
标签:
c++
linux
environment-variables
【解决方案1】:
如果将 NULL 指针传递给 strcmp,则会出现未定义的行为,在这种情况下很可能会崩溃。
您是否知道指针可以是NULL,即故意无效?
你应该警惕这种可能性:
bool myFlag = false; // set default value
if ( show_line != NULL ) {
myFlag = ( strcmp(show_line, "1") != 0 ); // "? false : true" same as NOT…
}
【解决方案2】:
根据手册页,
getenv() 函数返回一个指向
环境,如果没有匹配则为 NULL。
因此,如果它不存在,则返回NULL,这会导致strcmp() 出现消化问题。