用fread和fwrite函數(shù)讀寫結(jié)構(gòu)體數(shù)據(jù),把數(shù)據(jù)寫入文件時(shí),只有漢字部分輸出正確,數(shù)字部分全市亂碼,讀取數(shù)據(jù)時(shí),數(shù)字部分顯示的好像是內(nèi)存地址。請(qǐng)高手指點(diǎn),急求,謝謝。#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貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
你寫入文件時(shí)取的是地址,還是地址的地址,別搞錯(cuò)了,要么指針,千萬(wàn)別又對(duì)指針取地址了。那樣存取的就是地址了。fread,則是讀的時(shí)候一樣,都要注意這個(gè)問題

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