为什么c++中长度为n的字符串在[n]索引上总是有一个空字符作为垃圾?
Why does a char string of n length in c++ always have a null char on [n] index as garbage?
声明长度为n的字符数组时,[n]处的值始终为0。它不应该是一个垃圾值吗?
#include <stdio.h>
int main() {
char arr[3];
arr[0] = 'a'; arr[1] = 'b'; arr[2] = 'c';
// Here arr[3] can be any garbage value.
// But it always appears to be 0. Why?
// Also arr[4], arr[5], arr[6]... are not 0,
// just some garbage as expected
printf("itch asciin");
int i;
for(i = 0; arr[i] != 0; i++) //Always breaks at i=3
printf("%dt%ct%dn", i, arr[i], (int) arr[i]);
int more = i + 5;
for(; i<more; i++)
// I am intentionally going outside the bound
printf("%it%ct%dn", i, arr[i], (int) arr[i]);
return 0;
}
预期输出
#include <stdio.h>
int main() {
char arr[3];
arr[0] = 'a'; arr[1] = 'b'; arr[2] = 'c';
// Here arr[3] can be any garbage value.
// But it always appears to be 0. Why?
// Also arr[4], arr[5], arr[6]... are not 0,
// just some garbage as expected
printf("itch asciin");
int i;
for(i = 0; arr[i] != 0; i++) //Always breaks at i=3
printf("%dt%ct%dn", i, arr[i], (int) arr[i]);
int more = i + 5;
for(; i<more; i++)
// I am intentionally going outside the bound
printf("%it%ct%dn", i, arr[i], (int) arr[i]);
return 0;
}
你认为输出会是什么?您可以假设:
i ch ascii
0 a 97
1 b 98
2 c 99
3 N 78 ----> (This may or may not be 0)
4 � -103
5 N 78
6 � -125
7 � -100
实际输出i ch ascii
0 a 97
1 b 98
2 c 99
3 0 ----> (Why is this always 0?)
4 � -103
5 N 78
6 � -125
7 � -100
注意:int/double/float数组不会发生这种情况。
数组中没有空终止符。printf
读过了末端。这是c++标准中未定义的行为。它以ara[4]
结尾,因为你(不)幸运。它可以走得更远,甚至使你的程序崩溃,因为它应该做的是undefined。
为了合理化在ara[4]
处的停止:在缓冲区