c - 结构中数组的动态内存分配

标签 c arrays dynamic struct

在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* 类型!

因此,

  1. 类型不匹配。

  2. 您必须先分配指针数组。即 a[i].d=malloc(row*sizeof(char *);

    然后你可以做 a[i].d[i] = malloc((length+1)*sizoef(char));

关于c - 结构中数组的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20449453/

相关文章:

c - 使用 union 强制 C 位域对齐

c - 用 C 语言在标准输出中打印新行的最快方法?

arrays - Swift:标签不显示

iphone - 我们如何在 iPhone 中处理动态 Web 服务?

c - 函数获取垃圾值

javascript - 在嵌套数组中查找和编辑?

python - Pandas 搜索速度/性能/效率

java - 注入(inject)一个用 Guice 即时编译的类

c++ - C++ 中的 new 与 *new

c - C 中 Exec 系列的用法