[英]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()
的參數是要打印的數據,一個數據項的大小,數據項的數量和文件指針。
尺碼有兩個問題:
sizeof(storedVal)
',它是指針的大小 - 而不是結構的大小。 所以,你需要使用:
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.