c - 具有 3 个字符的字符串显示意外的输出,而具有 6 个字符的字符串显示正确的输出

标签 c string

这是我的 C 代码

#include <stdio.h>

int main()
{
    char c[3] = "abc";
    char a[6] = "Shamal";

    printf("%s\n\n", c);
    printf("%s\n\n", a);

    return 0;
}

这里的输出是

abcW?

Shamal

6个字符的字符串正确显示字符串,而3个字符的字符串显示W?在代码末尾。

我知道我们需要放置空字符“\0”来终止字符串。但这里两个字符串都没有空字符,但只有一个字符串可以正常工作。这是什么原因?

最佳答案

正如上面的评论所说,undefined是未定义的,但你的问题的确切答案是,偶然发生第一个字符串后面的内存字节不是0,而是'W'然后是'?'之后是 0,它终止一个字符串。

对于第二个字符串,碰巧该字符串后面的一个字节意外地为 0,因此可以正确打印。

尝试重新排序初始化并查看输出是否发生变化(很可能会发生变化)。

关于c - 具有 3 个字符的字符串显示意外的输出,而具有 6 个字符的字符串显示正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46261272/

相关文章:

ios - Swift - 优化 UI 动画淡入淡出

asp.net - 在 ASP.NET Razor 中格式化字符串

c - 间接错误的级别

不断分配内存使系统崩溃以及如何为标准用户阻止它

c - 重新分配和释放原因 "double free or corruption"

Python-删除列表中包含其他单词的所有单词

java - android解析负数字符串

string - 获取字符串值形式的 VB6 变量名称

java - 用C写Java这段?

c - 使用递归函数读取数据