在不扰乱 gcc 的情况下检查 *char[] 的指针是否为 NULL

标签 c pointers gcc syntax null

我有 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/

相关文章:

C++ 'invalid conversion from ‘void*’ 到 ‘crypto_aes_ctx*’

c - 冗余 IRQ 清除挂起操作

c++ - vector 是否存在行主要形式?

c - 如何缩短数组?

Java是在运行时解释的吗?

c - NtQueryInformationProcess ProcessConsoleHostProcess 返回错误的进程 ID

c - 数组和 C 语法

c - 在 C 中初始化指针

c - 静态库中函数调用中的多个符号

c++ - 从捕获的值变量分配给 Lambda 参数时出现 gcc 编译器段错误