检查*char []的指针是NULL而不会扰乱gcc

Bac*_*kus 1 c syntax null gcc pointers

我有char *words[]持有不同长度的字符串.

words包含5个动态分配的字符串:["zero","one","two","three","four"].

我释放其中一个字符串并将其指针设置为NULL:

free(words[1]);
*(words[1]) = NULL;
Run Code Online (Sandbox Code Playgroud)

稍后我循环遍历words数组并检查每个项目是否NULL如此:

if(*words[i] == NULL)
Run Code Online (Sandbox Code Playgroud)

当我编译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
Run Code Online (Sandbox Code Playgroud)

Joh*_*oni 7

代码没有按照你的想法去做.*words[i]给你第i个字符串中的第一个字符(即a char),而不是第i个字符串本身(即a char*).你想要的只是words[i].请记住,在C char* words[]中基本上是char** words.

警告来自C认为char是整数的事实.在这种情况下,编译器警告你是一件好事!