首页 > 解决方案 > 使用 malloc 读取嵌套结构值

问题描述

我如何malloc()在 C 中使用这些结构:

typedef struct {
    char *Name;
    char *Email;
} Person;

typedef struct {
    unsigned int len;
    Value *pVal;
} Person;

如何使用 读取这些结构的值fread()

Person *p;
p->pVal = (Value *)malloc(p->len * sizeof(Value));
p->pVal.Name = (char *)malloc(sizeof(char));
p->pVal.Email = (char *)malloc(sizeof(char));

这是正确的方法吗?Name和的大小Email将从文件中读取,并且大小可变。

标签: cmallocfread

解决方案


如果你不知道你的字符串有多长,你必须读入一些临时缓冲区,然后解析内容。

为字段定义一些最大长度会很有用:

// TODO: Check for NULL result for all calls to malloc

#define MAX_FIELD_LEN 500

char temp_name[MAX_FIELD_LEN] = {0};
char temp_email[MAX_FIELD_LEN] = {0};

Person *p = malloc(sizeof (*p));
p->len = ...; 
p->pVal = malloc(p->len * sizeof(*p->pVal));
for (int i = 0; i < p->len; i++) {
    // read file content into temp_name and temp_email
    p->pVal[i].Name = malloc(strlen(temp_name)+1);
    strcpy(p->pVal[i].Name, temp_name);
    p->pVal[i].EMail = malloc(strlen(temp_email)+1);
    strcpy(p->pVal[i].Email, temp_email);
}

这是基于您问题中的代码。如果没有有关如何获取数据的更多详细信息,则无法提供最佳解决方案。

您需要定义文件的结构。必须定义如何存储字符串以及在回读时如何将它们分开。

您可以阅读有关“序列化/反序列化”的更多详细信息。


推荐阅读