为什么字符串中第(n+1)项的整数值为0?

Why is integer value of the (n+1)th term in a string is 0?

b[5](即最后一项的下一项)的值如何等于 0? 但是 b[6] 给出了一些随机数。

#include <stdio.h>
int main()
{
    char *b = "HELLO";
    printf("%d",b[5]);
    return 0;
}

C-strings 以空值终止。这就是为什么当你像整数一样打印它时它给出 0.

如果你这样做:

if(b[5] == '[=10=]')
    printf("null detected\n");

然后将打印“检测到空值”。

原因是字符串作为指针传递,它们的大小不是known/passed。所以所有函数都使用空字符来检测结束,正如@Downloadpizza 所评论的那样。

您不应该访问空终止符之后的内存,因为这就像越界访问数组。

C 语言使用“NULL TERMINATION”作为字符串的结尾。其值对应于“0”。(NUL = 0 的 ASCII)(根据定义)。
注意: ,你的字符串从

开始
 b[0]- H , b[1]- E , b[2]- L , b[3]- L , b[4]- O , b[5]- [=10=] [NULL Termination].


所以 b[5] 对应于第 6 个字节,因为它是字符串的结尾。它对应于 NUL(\0)

参考link了解更多详情:[C Strings]

C 使用空字符来标记字符串的结尾。空字符是值为零的字符。

空字符会自动添加到字符串文字的末尾,因此 "HELLO" 由字母 H、E、L、L、O 和空字符组成。

b[6] 将是超出字符串末尾的字符。由于这不是字符串的一部分,因此没有将那里的内存设置为初始化字符串的一部分。它可能是您程序中的其他数据(包括您通常看不到的数据,因为它是支持 C 程序的 behind-the-scenes 软件的一部分),并且访问它的行为不是由 C 标准定义的。访问它可能会以各种方式损坏您的程序。