[英]Access array with chars in C
有一段時間我有這個結構:
struct coordinates{
struct coord coord_board[8][8];
};
我已經用
coordBoard = malloc(sizeof(struct coordinates));
for (col = 'a'; col <= 'h'; col++) {
for (row = '1'; row <= '8'; row++) {
initializeCoord(col, row);
}
}
void initializeCoord(char col, char row) {
coordBoard->coord_board[col][row].Iter = 0;
coordBoard->coord_board[col][row].occupant = NULL;
}
因此,這實際上已經工作了一段時間。 我什至可以使用字符訪問它們:
void printCoordBoard() {
char col, row;
printf("\n");
for (col = 'a'; col <= 'h'; col++) {
for (row = '1'; row <= '8'; row++) {
struct coord l = board->coordBoard->coord_board[col][row];
printf("%c ", l.occupant == NULL ? ' ' : l.occupant->type);
}
printf("\n");
}
}
這也起作用。 但是現在不行了-我也不知道該怎么做才能使它失敗。 盡管當我考慮它時,這是有道理的。 自從我使用C已經有一段時間了,但是我記得所有的數組都是使用整數訪問的-對嗎? 我將它們初始化為array[8][8]
。 因此,當我使用“ a”訪問它時,我實際上將訪問位置97(char a的十進制值),對嗎? 然后,我當然會有內存損壞。
然后我的問題是:為什么起作用? 更奇怪的是-如果將數組更改為[7] [7],它將再次起作用...我感到困惑。 另一個問題是-C中是否有一種方法可以使用char來訪問數據,而不必初始化最高char的數組(在這種情況下為“ h”,它將創建一個104x104數組)?
我希望有人能迷戀我!
祝你有美好的一天。
是的,您有嚴重的不確定行為。 您無法像這樣進行索引,這是沒有意義的,因為您只能容納8x8個元素,並且字符的整數值通常大於0..7,這是每個維度中的索引空間。
之所以起作用,是因為未定義的行為代碼的行為是未定義的,並且“按預期工作(對於某些期望值)”當然是所有未定義空間的一部分。 基本上,您可以提出其他任何建議。 :)
實際上,它之所以可行,是因為內存分配足夠精細,可以使主要的越界訪問不會落在您無法編寫的任何地方。 也許您破壞了malloc()
的簿記,但沒有注意到,因為您再也沒有調用過free()
或malloc()
或任何其他方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.