簡體   English   中英

在C中使用字符訪問數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM