用fread和fwrite函數讀寫結構體數據,把數據寫入文件時,只有漢字部分輸出正確,數字部分全市亂碼,讀取數據時,數字部分顯示的好像是內存地址。請高手指點,急求,謝謝。#include<stdio.h>#include<stdlib.h>struct time{int year;int mon;int day;int hour;int min;float sec;};void main(){struct time tim[8];int i;for(i=0; i<8; i++){tim[i].year = 2000;tim[i].mon = 1;tim[i].day = 1;tim[i].hour = 0;tim[i].min = 0;tim[i].sec = 0.0;}FILE *fp;fp = fopen("E:\\C程序\\1.txt","wb");if(fp==NULL){printf("file open error!\n");exit(0);}else{for(i=0; i<8; i++){fwrite(&tim[i],sizeof(struct time),1,fp);printf("%d %d %d %d %d %4.2f\n",tim[i].year,tim[i].mon,tim[i].day,tim[i].hour,tim[i].min,tim[i].sec);}}fclose(fp);}
2 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
你寫入文件時取的是地址,還是地址的地址,別搞錯了,要么指針,千萬別又對指針取地址了。那樣存取的就是地址了。fread,則是讀的時候一樣,都要注意這個問題

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
不知你是如何輸出的?
用fwrite()寫入文件的值,如果用fread()來讀取是可以取回原始的內容的,但是如果用fwrite()寫入這個txt文件是為了用“記事本”等文本處理軟件打開來閱讀,那么一定會有亂碼的情況。因為二進制的讀寫會直接將數值原樣寫入文件,不會進行ASCII碼的轉換,而文本都是需要經過ASCII碼轉換的。
如果是為了打開TXT文件進行閱讀,應該使用fprintf()/fscanf()等函數進行讀寫。
- 2 回答
- 0 關注
- 276 瀏覽
添加回答
舉報
0/150
提交
取消