私はchar *words[]それがさまざまな長さの弦を保持している。
動的wordsに割り当てられた5つの文字列を含めます["zero","one","two","three","four"]。
文字列の1つを解放し、そのポインタをNULL次のように設定します。
free(words[1]);
*(words[1]) = NULL;
後で、words配列をループして、各項目がNULL次のようになっているかどうかを確認します。
if(*words[i] == NULL)
そして、私がコンパイルすると、gccは言いwarning: comparison between pointer and integerます。少しグーグルすると、チェックを次のように変更することで、この警告を消すことができることがわかりました。
if(*words[i] == 0)またif(*words[i])
私はその気まぐれなことを知っていますが、これらのチェックは、それが使用された場合ほど明確ではありませんNULL。NULLgccフラグを変更せずに使用したり、#define-esqueソリューションを使用したりして比較する方法はありますか?
参考までに、私のコンパイルコマンドは次のとおりです。
gcc -m32 -g -O0 -std=gnu99 -Wall -Wfloat-equal -Wtype-limits -Wpointer-arith -Wlogical-op -fno-diagnostics-show-option -m32 words.c -o words