私は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
。NULL
gccフラグを変更せずに使用したり、#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