2012-04-11 8 views
0

こんにちは私はLinuxプラットフォームでC++を扱っています。私は環境変数(ユーザ定義)の価値を得て、さらにそれを使用しなければなりません。 以下は、私は環境変数1に等しい(MY_SHOW_LINES)の値を設定したときにコードの上const char *を使用したメモリの不具合?

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

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

が適切に実行される、私が使用しているコードですが、私はそれの値の設定を解除する場合(すなわち。解除MY_SHOW_LINES)。 上記のコードでは、メモリに障害があります。 上記のUNの期待される行動に関する提案はありますか? ありがとうございます

+0

参照:http://stackoverflow.com/questions/4932848/strcmp-behaviour –

答えて

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

0

があった場合manページによると、

のgetenv()関数は 環境での値へのポインタを返す、またはNULL一致しません。

したがって、それが存在しない場合はNULLを返し、strcmp()の消化の問題を引き起こします。

関連する問題