C雖然提供了很彈性的陣列初始化列表自動偵測功能,能夠自動宣告適當尺寸的陣列,但是當配合上C語言在讀寫時不會協助偵測溢讀(溢寫)的特性時,這個彈性的陣列初始化,郤製造出了一個當機陷阱。前述的溢讀(溢寫)是指本來向量有三個元數,程式郤被設計成要讀(寫)超過三個元數。
除非我們有函式資源可以用來偵測陣列的尺寸,否則很容易就溢讀溢寫陣列。可惜C語言沒有提供函式可以協助偵測陣列尺寸。我們必需使用BYTES 數偵測函式sizeof()為基本函式,自行偵測陣列尺寸。在說明如何自行偵測陣列尺寸之前,我們先要了解陣列佔用
BYTES 數的公式:
int x,y,array[2][3];
x = sizeof(array) / sizeof(array[0]); /* = 2 */
y = sizeof(array[0]) / sizeof(array[0][0]);/* = 3 */
有了陣列尺寸偵測方法後,隨意改變陣列初始值,均可以自動改變陣列尺寸,以及對應尺寸的for迴圈限制值,而不會出現錯誤讀寫。
範例程式:
#include "c4mlib.h"
int main(){
C4M_DEVICE_set();
int i,j,ilen,jlen;
int matrix[][]={{1,2},{3,4},{5,6}};
ilen=sizeof(matrix)/sizeof(matrix[0]);//ilen=3;
jlen=sizeof(matrix[0])/sizeof(matrix[0][0]);//jlen=2
for(i=0;i
{
for(j=0;j
printf("%d",matrix[i][j]);
printf("\n");
}
return 0;
}