簡體   English   中英

C: ERROR 在 mallocing 並將二維字符數組傳遞給函數之后

[英]C: ERROR After mallocing and passing 2D char array to function

我不明白下面的代碼有什么問題。 它應該分配一個二維字符數組[5][30](稱為LENGTH),將它傳遞給一個函數並用一個字符串填充它。 它在函數中工作得很好; 我可以從那里打印它,沒有任何問題。 但是我什至無法從 main() 函數中打印第一個(如果我嘗試,應用程序會崩潰)。 有人可以解釋一下我做錯了什么嗎?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LENGTH 5 
void fillArray(char array[][LENGTH]) {
    for (int i = 0; i < 5; i++) {
        strcpy(array[i],"Hi World");
    }
    for (int i = 0; i < 5; i++) {
        printf("%s\n",array[i]);
    }
}

int main() {
    char** array = (char**)malloc(5*sizeof(char*));
    for (int i = 0; i < 5; i++) {
        array[i] = (char*)malloc(LENGTH);
    }
    fillArray(array);
    printf("%s",array[0]);
    getchar();
    return 0;
}

main()函數中,您正在傳遞雙指針array並使用 2D 數組array[][LENGTH]捕獲這是不正確的,只是說雙指針2D 數組不相似,反之亦然。

對於您在fillArray()任務,使用array of char pointer作為參數,有多少? LENGTH

void fillArray(char *array[LENGTH]) { /* this is okay */
        for (int i = 0; i < 5; i++) {
                strcpy(array[i],"Hi World");/*now in `array[i]` you can store any no of char. */
        }
        for (int i = 0; i < 5; i++) {
                printf("%s\n",array[i]);
        }
}

也不需要強制轉換malloc()並且一旦工作完成,不要忘記通過為每個調用free()釋放動態分配的內存

基本問題是您的函數需要一個二維數組,但這不是您傳遞給函數的內容。

main您分配了一個一維指針數組。 然后對於這些指針中的每一個,您分配一個一維字符數組。 那不是二維數組

所以你的函數沒有得到它期望的結果,因此你的程序失敗了。

所以而不是:

char** array = (char**)malloc(5*sizeof(char*));
for (int i = 0; i < 5; i++) {
    array[i] = (char*)malloc(LENGTH);
}

試試這個:

char (*array)[LENGTH] = malloc(5*LENGTH*sizeof(char*));

得到一個正確的 malloc'ed 二維數組。

順便說一句:

我認為你這里有一個錯誤

#define LENGTH 5
               ^
               I guess you want 30 instead of 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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