繁体   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