c - 使用 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
将从文件中读取,并且大小可变。
解决方案
如果你不知道你的字符串有多长,你必须读入一些临时缓冲区,然后解析内容。
为字段定义一些最大长度会很有用:
// 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);
}
这是基于您问题中的代码。如果没有有关如何获取数据的更多详细信息,则无法提供最佳解决方案。
您需要定义文件的结构。必须定义如何存储字符串以及在回读时如何将它们分开。
您可以阅读有关“序列化/反序列化”的更多详细信息。
推荐阅读
- python - Convert Sub-List of Strings to Dictionary
- windows - 来自 DevOps 的交叉发布:Azure 发布管道使用 Expand-Archive 命令失败
- javascript - TypeError: shooter is not iterable when trying to sort tbody ascending in react js
- c# - Unity Car Steering by Itself
- python - 跨数据库规范化,然后跨组规范化
- qt - QML Profiler - Light blue lines and dots?
- ios - Update after deleting cell Firestore Swift
- javascript - 无法访问快速路线?
- c - 使用 winmain 和简单代码编译错误,“WinMain 的先前声明”
- python - Split a torch tensor using a same-sized tensor of indices