使用 fwrite,我正在编写整个结构?我们在 f1 和 f2 中吗?任何帮助将不胜感激
typedef struct {
int field1;
int field2;
}mystruct;
int main(int argc,char *argv[])
{
int size=2;
mystruct structarray [size];
int i=0;
for (i=0;i<size;i++)
{
structarray[i]=calloc(1,sizeof(mystruct));
}
FILE *F1;
if (fopen("structfile","wt")==NULL){
err_sys("cannot be opened");
}
i=0;
for (i=0;i<size;i++)
{
structarray[i].field1=i;
}
fwrite(structarray[0].field1,sizeof(mystruct),size,F1);
fclose(F1);
}
最佳答案
从概念上讲,您的方法是可行的。但是,您的代码存在一些问题:
(1) structarray
被声明为自动变量(在堆栈上分配)。没有理由为每个数组元素调用calloc()
;该数组已经完全分配。也许您打算初始化数组元素(例如,memset() 等)。
(2) fopen()
返回指向已打开文件的指针,但您没有将返回值分配给 F1
。因此,F1
仍未初始化,因此对 fwrite()
的调用不起作用。
(3) 如果您的目的是将完整的结构数组保存到文件中(而不是特定元素),请将您的调用更改为 fwrite()
,如下所示:
fwrite(structarray, sizeof(mystruct), size, F1);
(4) 始终检查 fwrite()
的返回值以确保其成功。
关于C 结构体可以工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139707/