我有 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 标志或使用 #define
式解决方案的情况下使用 NULL
进行比较?
作为引用,我的编译命令是:
gcc -m32 -g -O0 -std=gnu99 -Wall -Wfloat-equal -Wtype-limits -Wpointer-arith -Wlogical-op -fno-diagnostics-show-option -m32 words.c -o words
最佳答案
代码没有按照您的想法运行。 *words[i]
给出第 i 个字符串中的第一个字符(即 char
),而不是第 i 个字符串本身(即 char*
).你想要的只是 words[i]
。请记住,在 C 中 char* words[]
基本上是 char** words
。
警告来自 C 认为 char
为整数的事实。在这种情况下,编译器警告您是件好事!
关于在不扰乱 gcc 的情况下检查 *char[] 的指针是否为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432030/