1、因?yàn)槟銓懳募臅r(shí)候使用了fwrite fread, fwrite - binary stream input/output而fread,fwrite是以二進(jìn)制的方式讀寫的,所以保存的文件是亂碼。
成都創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、重慶小程序開發(fā)公司、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!
2、結(jié)構(gòu)體類型寫入文件,那么保存的必然是二進(jìn)制數(shù)據(jù),直接看文件肯定是亂碼的。如果想文件內(nèi)容是直接可看的,那么不要直接存儲(chǔ)結(jié)構(gòu)體,應(yīng)該自己設(shè)計(jì)這個(gè)文件的文本格式,按文本方式存儲(chǔ)數(shù)據(jù)。
3、先確認(rèn)一下文件是二進(jìn)制存的嗎?如果是,用記事本打開它,應(yīng)該是看不到數(shù)字的。不是說(shuō)在記事本里輸入字符1 2 3 4,然后保存成number.dat,程序就能正確讀取的。
4、全部調(diào)用 gets 函數(shù),一次回車輸入一行,而不是全部用 scanf來(lái)做。至于亂碼,是因?yàn)樽詈笠粋€(gè)字符串變量沒(méi)有初始化,于是后面沒(méi)有\(zhòng)0,程序把內(nèi)存中的亂碼寫進(jìn)文件,直到偶然遇到\0為之。這樣的程序是不穩(wěn)定的。
5、這里每次讀入4個(gè)字節(jié),而因?yàn)槭沁@個(gè)文件里保存的都是字符,每個(gè)字符占一個(gè)字節(jié),所以實(shí)際上第一次是把 10 _ 0 _ 四個(gè)字符,拼成了一個(gè)4字節(jié)的整數(shù),并且保存在了a[0]里面。
6、你寫入文件的又不是字符串, 當(dāng)然是看起來(lái)是亂碼。可以先sprintf(str,%f,i),轉(zhuǎn)成字符串,將str用fwrite寫入文件。但這樣再去讀這些文件,需要再次將字符串轉(zhuǎn)換成數(shù)字。
這是C語(yǔ)言習(xí)慣,務(wù)必養(yǎng)成!\x0d\x0a\0是字符串結(jié)束符,每當(dāng)解釋器看到這\0才會(huì)認(rèn)為字符串終止,而你的程序明顯沒(méi)有字符串結(jié)束符,所以連同垃圾內(nèi)存一起讀出來(lái)了。“燙燙。”等就是垃圾內(nèi)存。
文件編碼問(wèn)題,如果是VC,person.txt要用ASCII或GBK編碼。
漢字亂碼是因?yàn)榫彌_區(qū)有字符,需要用fflush(stdin);來(lái)清空鍵盤緩沖區(qū),使用getch等都是治標(biāo)不治本的辦法,可以多學(xué)習(xí)一下fflush的使用,對(duì)于大批量的手動(dòng)輸入,很用。
你這個(gè)亂碼,你的文件里,學(xué)號(hào)長(zhǎng)度為10個(gè)字節(jié),所以你定義學(xué)號(hào)這個(gè)變量時(shí),必須定義11個(gè)字節(jié)的長(zhǎng)度,因?yàn)樽址淖兞浚仨氁幸粋€(gè)\0作為結(jié)束,不然的話,顯示的時(shí)候,沒(méi)有結(jié)束符就會(huì)接著往下顯示,就會(huì)有亂碼出現(xiàn)。
=1) 簡(jiǎn)單看了下,這行有問(wèn)題,往文件里寫的時(shí)候是把一個(gè)字符串寫進(jìn)去,stud[i]是一個(gè)struct,強(qiáng)行把它序列化的話,內(nèi)存中的存儲(chǔ)不是連續(xù)的,這樣寫就會(huì)寫入一些沒(méi)用的數(shù)據(jù),導(dǎo)致出錯(cuò)。
你這個(gè)亂碼,你的文件里,學(xué)號(hào)長(zhǎng)度為10個(gè)字節(jié),所以你定義學(xué)號(hào)這個(gè)變量時(shí),必須定義11個(gè)字節(jié)的長(zhǎng)度,因?yàn)樽址淖兞浚仨氁幸粋€(gè)\0作為結(jié)束,不然的話,顯示的時(shí)候,沒(méi)有結(jié)束符就會(huì)接著往下顯示,就會(huì)有亂碼出現(xiàn)。
k不應(yīng)該是按位賦值給key的嗎?為什么把key[i]都賦值為k 總結(jié):把指針賦值給變量,會(huì)輸出地址,printf會(huì)把地址強(qiáng)轉(zhuǎn)為十進(jìn)制輸出;key數(shù)組中每一個(gè)數(shù)字都被賦值為k,然后輸出,就會(huì)輸出一長(zhǎng)串?dāng)?shù)字。
p1-bthplc:(未初始化,數(shù)據(jù)不可知)由于p1-bthplc未初始化,所以會(huì)有亂碼出現(xiàn)。建議你采用三個(gè)數(shù)據(jù)分開輸入的方式解決這個(gè)問(wèn)題。
如果輸出的是字符串,則是沒(méi)有正確設(shè)置串尾符\0(或是正確的串尾符被破壞掉了)的緣故。
文章題目:c語(yǔ)言存儲(chǔ)函數(shù)亂碼 c語(yǔ)言 存儲(chǔ)
轉(zhuǎn)載源于:http://chinadenli.net/article24/dehdjce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、虛擬主機(jī)、商城網(wǎng)站、微信小程序、營(yíng)銷型網(wǎng)站建設(shè)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)