【问题标题】:Write and read a struct in C?在 C 中编写和读取结构?
【发布时间】:2026-01-24 06:25:01
【问题描述】:

所以一开始我创建了我的结构:

结构兴趣 *p =malloc(256);

并在结构内部分配变量:

  p -> num = 1;
  p -> size = 2;
  p -> name = "jacky";

打开输出文件后,我将这个结构体写入其中:

 fwrite(&p,sizeof(p), 1, output_file);

这是我的第一个问题,如果我想写一个struct p,把它写成“&p”对吗?

假设我已经成功编写了它,我想知道从我的 output_file 中读取结构。 然后我继续:

...#open the outputfile for reading

结构兴趣 *buff = malloc(256);

fread(&buff, sizeof(buff),1,output_file);

然后当我尝试打印 buff 的 num 或 size 时出现分段错误..

什么 是正确的做法吗?

我想打印它的原因是因为我想检查我是否真的把那个结构写到了输出文件中。

谢谢。

【问题讨论】:

  • 你能发布一个最小的程序来重现你的错误,而不仅仅是几行代码吗?

标签: c file struct io fread


【解决方案1】:

首先,你应该做

p = malloc(sizeof(struct interest))

第二,pbuff 已经是指针了,你应该写:

fwite(p, sizeof(struct interest), fp)
fread(buff, sizeof(struct interest), fp)

最后,要复制字符串,你应该写

<string.h>
strncpy(p->name, "jacky", sizeof(p->name))

【讨论】:

  • 谢谢!对于第一个,我应该将 p 声明为“struct packet *p;”吗?第一的?另外,如果 name 本身就是一个指针呢?我想让名字指向“jacky”?
【解决方案2】:

错误 1)

你不能这样做:

p -> name = "jacky"

用途:

strcpy(p->name, "jacky");

改为。

错误 2)

Struct 有一个固定的长度,你要分配 256 字节给它?也许你想要的是:

 struct interest *p =malloc(sizeof(struct interest));

错误 3)

用途:

fwrite(p,sizeof(struct interest), 1, output_file);

p 已经是一个指针了

发布您的结构声明。你可能会遇到更多问题。

【讨论】:

  • 谢谢!如果 name 本身就是一个指针呢?我想让名字指向“jacky”?