2012-04-11 73 views
0

嗨我在Linux平台上使用C++,我必须得到一个环境变量(用户定义)的价值,并进一步使用它。 以下是我使用的代码,使用const char *的内存故障

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

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

上面的代码执行正确,当我设置环境变量(MY_SHOW_LINES)等于1的值,但是当我取消设置它的值(即,未设置MY_SHOW_LINES)。 上面的代码给出了内存错误。 有关以上预期行为的任何建议? 在此先感谢

+0

查看http://stackoverflow.com/questions/4932848/strcmp-behaviour – 2012-04-11 06:07:17

回答

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… 
} 
+0

感谢所有.. – BSalunke 2012-04-11 06:16:26

0

根据该男子页,

的GETENV()函数返回 环境的指针值,或NULL如果有是不匹配的。

所以如果它不存在,它会返回NULL,这会导致strcmp()消化问题。