我不明白下面的代码有什么问题。它应该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;
}
答案 0 :(得分:0)
从main()
函数传递双指针array
并捕获不正确的2D数组array[][LENGTH]
,只是说双指针与 2D阵列&amp;反之亦然。
为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()
。< / p>
答案 1 :(得分:0)
基本问题是你的函数需要一个二维数组,但这不是你传递给函数的那个。
在main
中,您可以分配一维指针数组。然后,对于每个指针,您分配一个chars的一维数组。 这不是2D数组。
因此,您的功能无法达到预期效果,因此您的程序失败。
所以而不是:
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 2D数组。
顺便说一句:
我认为你有一个错误
#define LENGTH 5
^
I guess you want 30 instead of 5