c語言陣列越界的避免方法

2022-02-04 14:01:32 字數 635 閱讀 4999

1、盡量顯式地指定陣列的邊界

#define max 10

…int a[max]=;

在 c99 標準中,還允許我們使用單個指示符為陣列的兩段「分配」空間,如下面的**所示:

int a[max]=;

在上面的 a[max] 陣列中,如果 max 大於 10,陣列中間將用 0 值元素進行填充(填充的個數為 max-10,並從 a[5] 開始進行 0 值填充);如果 max 小於 10,「[max-5]」之前的 5 個元素(1,2,3,4,5)中將有幾個被「[max-5]」之後的 5 個元素(6,7,8,9,10)所覆蓋。

2、對陣列做越界檢查,確保索引值位於合法的範圍之內

傳遞陣列引數的時候,一定要帶上傳入陣列的長度,比如:

void init(int arr,size_t arr_len)

}int main(void)

return 0;

}

現在,init() 函式中的 arr 引數是乙個指向「arr[10]」型別的指標。

而是必須指明要傳入的陣列的大小,否則「sizeof(*arr)」無法計算。但是在這種情況下,再通過 sizeof 來計算陣列大小已經沒有意義了,因為此時陣列大小已經指定為 10 了。

C語言陣列越界問題

先看下面這段 int i 0 int arr 10 arr 12 5 printf d i 按照通常的理解,陣列arr的訪問越界了,程式應該報錯才對,可是程式不僅沒報錯,反而輸出了5,這說明i的位址和arr 12 的位址是相同的。類似的還有下面的 這段 會形成死迴圈。int i 0 int arr ...

C 7 2 5陣列做實參 避免越界

有三種常見的程式設計技巧確保函式的操作不超出陣列實參的邊界。void printvalues const int beg,const int end int main printvalues j,j 2 j指向陣列的第乙個元素,j 2指向陣列最後乙個元素的下乙個位置 return 0 將被呼叫函式的...

c 陣列越界相關

標籤 空格分隔 問題少年系列 今天同學問我乙個很細節的問題,覺得提問那個人提不錯的 include stdafx.h include using namespace std int main cout cout return 0 我也很疑惑,所以查了一下 棧是由高往低增長的,而陣列的儲存是由低位往高...