我有char *words[]
,其中包含不同长度的字符串。
让words
包含5个动态分配的字符串:["zero","one","two","three","four"]
。
我释放其中一个字符串并将其指针设置为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
那样清晰。有没有办法在不改变gcc标志或使用NULL
- esque解决方案的情况下使用#define
进行比较?
作为参考,我的编译命令是:
gcc -m32 -g -O0 -std=gnu99 -Wall -Wfloat-equal -Wtype-limits -Wpointer-arith -Wlogical-op -fno-diagnostics-show-option -m32 words.c -o words
答案 0 :(得分:7)
代码没有按照你的想法行事。 *words[i]
为你提供第i个字符串中的第一个字符(即char
),而不是第i个字符串本身(即char*
)。你想要的只是words[i]
。请记住,在C char* words[]
中基本上是char** words
。
警告来自C认为char
是整数的事实。在这种情况下,编译器警告你是一件好事!