FILE *a=fopen("C:/123.exe","rb");fseek(a,0L,SEEK_END);long b=ftell(a);char * loc=(char *)malloc(b);if(loc==NULL)printf("error");memset(loc,0,b);fseek(a,0L,SEEK_SET);fread(loc,b,1,a);fclose(a);以rb方式打開(kāi),例如我自己創(chuàng)建個(gè)1.exe記事本方式打開(kāi)寫(xiě)入 abc 123 就可以正確讀取,但是如果是BMP那類(lèi)的文件 就只讀取前面幾個(gè)字符(都是字符后有空格) 之后就都不讀取了,為什么?
2 回答

慕村9548890
TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
根據(jù)你的程序,應(yīng)當(dāng)是讀進(jìn)來(lái)了;
但最好按照unsigned char讀入,另外也不能按照字符串處理,因?yàn)槎M(jìn)制文件中有許多0,打印輸出時(shí)以%x格式打印。
另外你還要判斷一下這個(gè)b會(huì)不會(huì)超過(guò)64k,如果超大,需要用大模式來(lái)編譯程序,以便支持大的內(nèi)存區(qū)訪問(wèn)。建議用小些的文件測(cè)試。

拉丁的傳說(shuō)
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
"C:/123.exe"這里應(yīng)該是"C:\\123.exe"才對(duì),其他沒(méi)有大問(wèn)題。fread是按字節(jié)讀取的,.exe文件有好多數(shù)據(jù)按字符是無(wú)法顯示的,不知你是怎么判斷沒(méi)有讀取正確。
- 2 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報(bào)
0/150
提交
取消