重要编辑:
对不起大家,我在结构上犯了一个大错误。字符*名称;意味着在结构之外,在结构之后写入文件。这样,您读取结构,找出名称的大小,然后读取字符串。还解释了为什么不需要空终止符。但是,我觉得在某个地方,我的实际问题已经得到解答。如果有人想编辑他们的回复,我可以选择一个最合适的回复,我会很感激。
同样,我要问的问题是“如果您阅读一个结构,您是否也在阅读它所包含的数据,或者您是否需要以其他方式访问它”。
对困惑感到抱歉
对于一项任务,我的任务是编写一个程序,该程序将结构写入和读取磁盘(使用 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 是:
fread(&names,sizeof(names),1,fp);
还假设我们已经在当前函数中定义了结构,如上所述。
谢谢您的帮助!