越界的 C 数组内容是 '\0' 但不是随机值

标签 c string

我有一个数组

char * string = “hello”;

当我读取string[5]时,值为0,这不是随机值吗?

我的疑问来自于我使用memcmp 来比较两个数组。 argv 长度比数组长度长,但它工作正常。我知道 memcmp 在读取“\0”时停止,但数组没有“\0”。我在 Dev C++ 上对此进行了测试。

最佳答案

不,数组"hello" 包含六个char,最后一个是'\0'。所以在你的情况下 string[5] 保证是 '\0'。但是,string[6] 会给您未定义的行为。

但是 memcmp 不会停在 0 字节处,只有 strcmp 会。

关于越界的 C 数组内容是 '\0' 但不是随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11538294/

相关文章:

java - 使用 charAt 和 while 循环 Java 查找字符串中的字母

c - 从c中的末尾获取链表中的节点值

c - 在 C 中获取段错误

python - 返回与指针赋值之间的 c_char_p 行为不一致

c# - foreach 循环中的 String.Format 用于在同一行中打印

c# - 在字符串中间插入一个变量但保留单引号 (C#)

c - 未打印正确的字符数组 C

c - 二维数组上的 memcpy

c - 如何连接字符和字符串/How to make char to string

c - 是否有用于将字符串与字符表进行比较的 C 函数?