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 に答える