首页 > 解决方案 > 为什么最后一个数组元素打印数组大小?

问题描述

    #include <stdio.h>

int f(int a, int b){
    if(a > 8 || a<0){
        printf("?\n");
        b = 2;
    }else if(b != 1){
        b= 1;
    }else{
        b = 2;
    }

    return b;
} 

int main(){
    int position[8];
    int currentPosition;
    int loopNumber;
    int loopNumber2;
    for(loopNumber = 0;loopNumber <= 8; loopNumber++){
        position[loopNumber] = -1;
        printf("%d\n", position[loopNumber]);
    }
    scanf("%d", &currentPosition);
    //printf("%d\n",f(currentPosition, position[currentPosition]));
    position[currentPosition] = f(currentPosition, position[currentPosition]);
    for(loopNumber2 = 0;loopNumber2 <= 8; loopNumber2++){
        printf("%d\n", position[loopNumber2]);
    }
    return 0;
}

我得到:

*-1
-1
-1
-1
-1
-1
-1
-1
-1
**0 (my input)**
1
-1
-1
-1
-1
-1
-1
-1
8*

为什么最后会打印 8?第 8 个元素第一次打印 -1 但在我调用我的函数后它打印数组大小?

标签: arraysc

解决方案


像您一样存储到不存在的位置[8] 是未定义的行为。当您有未定义的行为时,任何事情都可能发生。无论您喜欢与否,就 C 语言而言,无论发生什么都是正确的。

“为什么?” 无关紧要。这是你的错,你自己的错,你处理它。修复你的代码。


推荐阅读