2012-04-11 74 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()消化問題。