簡體   English   中英

如何使用fwrite將結構寫入文件?

[英]How to write a struct to a file using fwrite?

我是C的新手,我在使用fwrite方面遇到了麻煩。

我想使用一個包含兩個值的結構:

struct keyEncode{
    unsigned short key[2];
    unsigned short encoded[2];
};

然后我在main中聲明我的struct和指向該struct的指針:

struct keyEncode keynEncode;
struct keyEncode *storedVal = &keynEncode;

然后我為結構賦值,並希望使用fwrite將結構寫入文件:

keynEncode.key[0] = k1[0];
keynEncode.key[1] = k1[1];
keynEncode.encoded[0] = p[0];
keynEncode.encoded[1] = p[1];
// i tried to use storedVal.key[0] = k1[0]; but i was getting compile errors

fwrite(storedVal, sizeof(storedVal), 0xffff, fp);

現在我的問題是fwrite沒有寫任何文件。

我哪里錯了?

您在指針上使用sizeof ,這不會計算有效結構的大小,而是指向其中一個指針(可能是4或8個字節)。 嘗試使用sizeof(struct keyEncode) (如果使用C ++, sizeof(keyEncode)就足夠了)。

然后我不明白為什么你有0xFFFF作為計數,不應該只是1

假設你只有一個這樣的結構,那么你需要改變:

fwrite(storedVal, sizeof(storedVal), 0xffff, fp);

fwrite(storedVal, sizeof(*storedVal), 1, fp);

fwrite()的參數是要打印的數據,一個數據項的大小,數據項的數量和文件指針。

尺碼有兩個問題:

  1. 您指定' sizeof(storedVal) ',它是指針的大小 - 而不是結構的大小。
  2. 您指定需要編寫65,535個。

所以,你需要使用:

 if (fwrite(storedVal, sizeof(*storedVal), 1, fp) != 1)
    ...error handling...

請注意, fwrite()返回寫入的項目數。 在一般情況下,您有n個要寫的項目,您應該檢查:

 if (fwrite(storedVal, sizeof(*storedVal), n, fp) != n)
    ...error handling...
FILE *fp = fopen("c:\\test", "wb");
if (fp != NULL) {
    fwrite(storedVal, sizeof(keynEncode), 1, fp);
    fclose(fp);
}
 // i tried to use storedVal.key[0] = k1[0]; but i was getting compile errors

對於這個。 storedVal是指向struct的指針。 C的指針解引用運算符是 - >所以你想要的

 storedVal->key[0] = k[0];

查看您的變量定義,並查看您在sizeof調用中使用的變量。 指定指針的大小而不是數據的大小是否正確? 另外檢查你對fwrite的使用,我認為你錯誤地指定了“count”參數。 它被定義為

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

count參數指定要寫入文件的大小大小的塊

我真的不想馬上給你答案(其他人可能會),因為這被標記為家庭作業 - 你應該學習:)

暫無
暫無

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

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