簡體   English   中英

C結構會這樣嗎?

[英]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]是一個mystructcalloc返回一個指針。 根據您的問題,請參閱aardvarkk的評論。 它還應該告訴你,你沒有設置它就使用了F1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM