在c工作。我正在尝试动态分配结构内的数组。该数组将保存 char 数据行。我看不到任何错误,感谢任何帮助。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct data
{
char **d;
}Data;
int main(void)
{
Data *a = malloc(10*sizeof(Data));
int i = 0, length = 0;
for(i = 0; i < 10; i++)
{
char buffer[1000] = { '\0' };
printf("\nenter data\n");
fgets(buffer, 1000, stdin);
length = strlen(buffer);
a[i].d[i] = malloc(sizeof(length+1)); //errors here, unhandled exception
strcpy(a[i].d[i], buffer);
}
for (i = 0; i < 10; i++)
{
printf("%s", a[i].d[i]);
}
return 0;
}
最佳答案
因为 char **d
是指向指针的指针。并且 malloc 返回 void*
类型!
因此,
类型不匹配。
您必须先分配指针数组。即
a[i].d=malloc(row*sizeof(char *);
然后你可以做
a[i].d[i] = malloc((length+1)*sizoef(char));
关于c - 结构中数组的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20449453/