【发布时间】:2016-11-09 07:05:33
【问题描述】:
在声明一个长度为n的char数组时,[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("i\tch ascii\n");
int i;
for(i = 0; arr[i] != 0; i++) //Always breaks at i=3
printf("%d\t%c\t%d\n", i, arr[i], (int) arr[i]);
int more = i + 5;
for(; i<more; i++)
// I am intentionally going outside the bound
printf("%i\t%c\t%d\n", 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 数组不会发生这种情况。
【问题讨论】:
-
你想写
ara[i]!='\0'而不是i!='\0'吗? -
巧合。
-
思想实验:拿一副纸牌,把它们扔到地上。将脚放在一张卡片上。抬起你的脚,看看它是什么。再次将脚放在卡片上。如果下次抬脚时看到同一张卡片,您会感到惊讶吗?
标签: c++ c arrays string pointers