我正在从Kochans的书中学习C并且已经完成了这个阵列练习。
它陈述ratingCount[11]
,但我尝试了不同的值来看看会发生什么。
当我在其中放入3个元素时,程序似乎仍接受ratingCounts[4]
及以上的值?
有人可以解释为什么会这样吗?
#include <stdio.h>
int main ()
{
int ratingCount[3], i, response;
for (i = 1; i <= 10; ++i)
ratingCount[i] = 0;
printf ("Enter your response\n");
for (i = 1; i <= 20; ++i)
{
scanf (" %d", &response);
if (response < 1 || response > 10)
printf ("Bad entry \n");
else
++ratingCount[response];
}
printf ("\n\n Rating\nNumber of Responses\n");
for (i = 1; i <= 10; ++i)
{
printf ("%d\t\t%d\n", i, ratingCount[i]);
}
return 0;
}
输出
Rating
Number of Reponses
1 1
2 1
3 1
4 1
5 1
6 2
7 2
8 4
9 5
10 1
Abort trap: 6
答案 0 :(得分:3)
当我在其中放入3个元素时,程序似乎仍接受ratingCounts [4]及以上的值?有人可以解释为什么会这样吗?
您正在为分配给阵列的内存末尾写入内存。该行动的结果未定义。您很可能会覆盖其他变量的存储空间。
某些编程语言在访问阵列时提供自动边界检查。 C没有。