arrays - C:错误分配并将 2D 字符数组传递给函数后

标签 arrays c malloc 2d

我不明白下面的代码有什么问题。它应该 malloc 一个 2D char 数组 [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] 捕获,这是不正确的,只是说双指针二维数组不同,反之亦然。

对于 fillArray() 中的任务,使用 char 指针数组 作为参数,有多少个? 长度

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() 释放动态分配的内存 对于每个。

关于arrays - C:错误分配并将 2D 字符数组传递给函数后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49828774/

相关文章:

java - 无法在 JNI 中将 GetMethodID 与字节数组参数一起使用

arrays - 变体数组可以有 0 个元素吗?

Jquery将所有李的ID插入数组

c++ - 如何使用 _WIN32 和 _CYGWIN_ 宏

c - 在C中打印二维矩阵

java - 如何使用 Java 流将两个数组合并到一个映射中?

在没有符号表的共享库文件中调用函数

c - C中的指针混淆

c++ - malloc 和 snprintf 总线核心转储

c - ProC 在 10g 上编译并在 11g 上运行