C 定义的元素较少的数组

C 定义的元素较少的数组,c,arrays,C,Arrays,我正在从Kochan的书中学习C,并且已经完成了这个数组练习。 它声明了ratingCount[11],但我尝试了不同的值来查看发生了什么 当我在其中放入3个元素时,程序似乎仍然接受ratingCounts[4]及以上的值? 有人能解释为什么会这样吗 #include <stdio.h> int main () { int ratingCount[3], i, response; for (i = 1; i <= 10; ++i) rati

我正在从Kochan的书中学习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;
    }
当我将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;
    }
您正在写入超出为数组分配的内存末尾的内存。该操作的结果尚未定义。您很有可能会覆盖其他变量的存储


某些编程语言在访问数组时提供自动边界检查。C没有。

您刚刚发现了未定义的行为!!让我们开个派对吧!今天是你倒霉的一天。一个有缺陷的程序似乎工作得很好,但实际上不是。。最后有一些“陷阱”…@EugeneSh。陷阱是未定义行为的一种表现形式。同意,但似乎不太管用。@EugeneSh.,哦,是的。毕竟不是那么倒霉的一天:):)