[英]C structs will this work?
有了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()
的返回值以確保它成功。
structarray[0].field1
是一個int
,但fwrite
的第一個參數是void*
。 采用
fwrite(structarray, sizeof(mystruct), size, F1);
或者,我更喜歡
fwrite(structarray, sizeof *structarray, size, F1);
因為它沒有耦合到結構structarray
的類型,減少耦合是一件好事。 你甚至可以做到
fwrite(structarray, sizeof structarray, 1, F1);
只要structarray
確實是一個數組而不是一個指針。
你應該檢查fwrite
的返回值。 並在警告級別設置為高的情況下編譯...編譯器應警告您嘗試將int
傳遞給fwrite
,以及
structarray[i]=calloc(1,sizeof(mystruct));
這是不合法的... structarray[i]
是一個mystruct
但calloc
返回一個指針。 根據您的問題,請參閱aardvarkk的評論。 它還應該告訴你,你沒有設置它就使用了F1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.