gpt4 book ai didi

c - 读写结构 [C]

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:49 24 4
gpt4 key购买 nike

重要编辑:

对不起大家,我在结构上犯了一个大错误。字符 *名称;意思是在结构之外,在结构之后写入文件。这样,您读取结构,找出名称的大小,然后读入字符串。还解释了为什么不需要空终止符。但是,我觉得在某个地方,我的实际问题已经得到解答。如果有人想编辑他们的回复以便我可以选择最合适的回复,我将不胜感激。

同样,我问的问题是“如果您读入一个结构,您是否也在读入它包含的数据,或者您是否需要以其他方式访问它”。

很抱歉造成困惑

对于一项作业,我的任务是编写一个将结构写入磁盘和从磁盘读取结构的程序(使用 fread 和 fwrite)。

我很难理解这个概念。假设我们有这样的结构:

typedef struct {
short nameLength;
char* name;
}attendenceList;

attendenceList names;

现在假设我们给它这个数据:

names.name = "John Doe\0";
names.nameLength = strlen(names.name); /*potentially -1?*/

然后我们使用 fwrite...给定一个文件指针 fp。

fwrite(&names,sizeof(names),1,fp);

现在我们关闭文件,稍后打开它以读取结构。问题是:当我们读入结构体时,是否也在读入它存储的变量?

那么我们现在可以做类似的事情吗:

if(names.nameLength < 10)
{
...
}

或者我们是否需要担心更多的东西而不仅仅是结构,或者以某种方式分配它们?假设恐惧是:

fread(&names,sizeof(names),1,fp);

还假设我们已经在当前函数中定义了结构,如上所述。

感谢您的帮助!

最佳答案

你这里有问题:

fwrite(&names,sizeof(names),1,fp);

由于 attendenceList 将名称保存为 char * 这将只写出指针,而不是实际的文本。当您读回它时,指针所引用的内存中很可能还有其他内容。

你有两个选择:

  1. 将一个字符数组 (char names[MAXSIZE]) 放入 attendenceList。
  2. 不要写原始数据结构,而是写必要的字段。

关于c - 读写结构 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com