1

我有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. 有没有办法在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
4

1 回答 1

7

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

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

于 2013-01-21T03:24:16.367 回答