超越陣列邊界

陣列是從零開始的,即索引始終從 0 開始,以索引陣列長度減 1 結束。因此,下面的程式碼不會輸出陣列的第一個元素,並將輸出它列印的最終值的垃圾。

#include <stdio.h>

int main(void)
{
    int x = 0;
    int myArray[5] = {1, 2, 3, 4, 5}; //Declaring 5 elements

    for(x = 1; x <= 5; x++) //Looping from 1 till 5.
       printf("%d\t", myArray[x]);

    printf("\n");
    return 0;
}

輸出:2 3 4 5 GarbageValue

以下演示了實現所需輸出的正確方法:

#include <stdio.h>

int main(void)
{
    int x = 0;
    int myArray[5] = {1, 2, 3, 4, 5}; //Declaring 5 elements

    for(x = 0; x < 5; x++) //Looping from 0 till 4.
       printf("%d\t", myArray[x]);

    printf("\n");
    return 0;
}

輸出:1 2 3 4 5

在使用陣列之前瞭解陣列的長度非常重要,否則你可能會通過訪問超出範圍的記憶體位置來破壞緩衝區或導致分段錯誤。