gpt4 book ai didi

c - 为什么指针 char 数组最后不会自动获取 NULL?

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:15 25 4
gpt4 key购买 nike

在下面的代码中,我正在打印一个指针数组。我正在终止 while 循环,同时它得到一个 NULL 但这并没有终止。为什么它没有得到 NULL

#include <stdio.h>

int main()
{
int i = 0;
char *a[] = { "This is", "a story", "of a person" };

while (a[i] != NULL) {
printf("%s ", a[i]);
i++;
}

return 0;
}

这是我的 GDB 调试 session :

30      while (a[i] != NULL) {
(gdb) p a[0]
$1 = 0x8048510 "This is"
(gdb) p a[1]
$2 = 0x804851b "a story"
(gdb) p a[2]
$3 = 0x8048523 "of a person"
(gdb) p a[3]
$4 = 0x8048480 <__libc_csu_init> "UW1\377VS\350\305\376\377\377\201\303u\033"

a[3] 为什么它不是 NULL。要获得 NULL 为什么我必须像这样在数组末尾声明一个显式 0:

char *a[] = { "This is", "a story", "of a person", NULL };

我们为什么要这样做?

最佳答案

除了由零字节隐式终止的字符串文字外,在 C 中所有内容都应该是显式的。因此使用显式终止 NULL 指针的代码如下:

 char *a[] = {"This is","a story","of a person", NULL};

顺便说一句,您可能需要 const char*a[] 而不是 char*a[] (例如,因为您希望 a 位于.rodata 只读数据段,如果这对您的实现有意义的话)。

关于c - 为什么指针 char 数组最后不会自动获取 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26928707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com