我在Linux Redhat上使用gcc编译器。我很惊讶为什么a[5]
和a[6]
(Maya和Mayank)的输出有2个字符差异,尽管它们的大小只有1个字节。
char a[5]="Mayank";
char b[6]="Mayank";
char c[7]="Mayank";
printf("%s\n",a);
printf("%s\n",b);
printf("%s\n",c);
输出:
Maya
Mayank
Mayank
答案 0 :(得分:8)
前两个printf
来电undefined behaviour,因为a
和b
都没有包含终止NUL字符(c
,所以最后{{1}本身就可以了。)
答案 1 :(得分:2)
char a[5]="Mayank";
您正在使用包含7个元素(7个字符)的字符串填充5个元素的数组。
"Mayank"
包含6个字符串+字符串末尾的空字符('\0'
)
所以这是未定义的行为。所以你会得到一个随机输出。
同样的事情
char b[6]="Mayank";
可以
char b[7]="Mayank";