c語言在輸入輸出檔案時為什麼出現亂碼?該怎麼解決

2021-05-21 16:53:50 字數 4309 閱讀 4968

1樓:匿名使用者

你這是想實現什麼功能呢? 亂碼是資料超過整數表示範圍產生溢位的結果

c語言檔案輸出時,輸入資料後為什麼會出現亂碼

2樓:祈倩語守洛

studenttype),1,fp)!=1)

簡單看了下,bai這行有問題,往檔案du裡寫zhi的時候是把一個dao字串寫進去,專stud[i]是一個struct,強行把它序列化的話,屬記憶體中的儲存不是連續的,這樣寫就會寫入一些沒用的資料,導致出錯。考慮一下怎麼把struct序列化,再看看struct的中的位元組是怎麼對齊的,建議而已

3樓:似曼雁京宣

先確抄認一下檔案是二進位制存的嗎?如果是,用記事本開啟它,應該是看不到數字的。不是說在記事本里輸入字元123

4,然後儲存成number.dat,程式就能正確讀取的。

二進位制讀取的時候fopen要寫成

fp=fopen("number.dat","rb");rb表示binary:二進位制讀寫。

4樓:海理函雨

你這種寫抄入方式是直接將這個資料的記憶體原封不動的拷貝到檔案當中。

在c語言中,記憶體中的結構體的儲存並不是所有資料連續的。

你可以在網路上搜尋一下結構體的對齊原則。

這種原則是c語言中,結構體儲存結構的原理。

如果你希望能更好的理解。

5樓:鎖盼盼賓逸

fwrite函式儲存資料時整型資料將會儲存為對應的ascii字元

比如48就會被儲存為『0』

c語言檔案輸出時,輸入資料後為什麼會出現亂碼

6樓:吃飽了就撐著

可能是輸入緩衝區之前未清空

使用這個函式將檔案緩衝區清空

memset(buffer,0,sizeof(buffer));

標頭檔案在#include中

7樓:幻夢·人生

你這種寫入方式是直接將這個資料的記憶體原封不動的拷貝到檔案當中。

在c語言中,記憶體中的結構體的儲存並不是所有資料連續的。

你可以在網路上搜尋一下結構體的對齊原則。

這種原則是c語言中,結構體儲存結構的原理。

如果你希望能更好的理解。

8樓:匿名使用者

studenttype),1,fp)!=1) 簡單看了下,這行有問題,往檔案裡寫的時候是把一個字串寫進去,stud[i]是一個struct,強行把它序列化的話,記憶體中的儲存不是連續的,這樣寫就會寫入一些沒用的資料,導致出錯。考慮一下怎麼把struct序列化,再看看struct的中的位元組是怎麼對齊的,建議而已

9樓:_qq加

fwrite函式儲存資料時整型資料將會儲存為對應的ascii字元

比如48就會被儲存為『0』

c語言fwrite寫入檔案後為什麼出現亂碼?

10樓:墨汁諾

這個函式以bai二進位制形式對du

檔案進行操作。zhi

按資料定義結構dao的版寫入保持資料結構的長度,對於數值型別,權再用文字方式開啟時表現為亂碼。例如float a=12345.67,寫入檔案後為4個位元組,開啟後不是文字表示的8個位元組。

寫入資料用fprintf(fp,"%s %s %d 這種方式。不是 fscanf(), 另,注意寫出時的格式裡要有分隔符空格,否則下次讀檔案時shu,字串,數字混在一起無法讀。允許同時「讀寫」的檔案,要注意讀寫位置的控制,必要時用到 迴繞檔案,或fseek。

11樓:匿名使用者

fwrite fread是成塊的對二進

制檔案進行讀寫,如以二進方式處理檔案,檔案裡的內容除了字內

符型以asc碼顯示的容你能用記事本開啟時能看明白,其它數值型別都是按其在記憶體裡的二進位制格式儲存的,你現在又以asc碼的形式強制解釋,當然全時亂碼。fwrite寫,就用fread讀,程式不會出問題,效率還高。

12樓:匿名使用者

這個函式bai

以二進位制形式對檔案進行du操作zhi

按資料定義結

構的寫dao入保持資料結構的長度,對內於數容值型別,再用文字方式開啟時表現為

亂碼。例如float a=12345.67,寫入檔案後為4個位元組,開啟後不是文字表示的8個位元組。

13樓:

size_t fwrite(const void* buffer, size_t size, size_t count, file* stream);

注意:這個函式以二進位制形式對檔案進行操作,不侷限於文字檔案返回回值:返回實際答寫入的資料塊數目

(1)buffer:是一個指標,對fwrite來說,是要獲取資料的地址;

(2)size:要寫入內容的單位元組數;

(3)count:要進行寫入size位元組的資料項的個數;

(4)stream:目標檔案指標;

(5)返回實際寫入的資料項個數count。

它寫入的時候是二進位制。所以你是看不了的。

14樓:匿名使用者

因為寫入檔案的是二進位制資料,所以看上去就是亂碼。

為什麼c語言輸出檔案內容亂碼

15樓:匿名使用者

這種文字文來件,不能自直接使用

讀到結構的方法。因為結構裡會有非文字的控制符,比如字串結束符'\0'。

一般使用直接讀到結構的方法,只限於二進位制格式的檔案,並且最好是讀自己建立的檔案,別人建立的,格式剛剛好合適建立結構的也很少。

你這個亂碼,你的檔案裡,學號長度為10個位元組,所以你定義學號這個變數時,必須定義11個位元組的長度,因為字串的變數,必須要有一個'\0'作為結束,不然的話,顯示的時候,沒有結束符就會接著往下顯示,就會有亂碼出現。

如果僅僅是這三行的話,倒也能使用結構來讀,比如結構裡定義num[11],讀完後執行一下num[10] = '\0';給它補一個結束符。但如果有人叫「王老四」,名字有的是2個字,有的是3個字這樣,你這個就不好判斷了。

這種文字,最好是使用fscanf("%s %s %s %s %s", num, name, ***, date, major)的形式來讀取。每次讀取一行。(注意字串定義變數時,長度一定要多加1位)。

16樓:月湖清夢

你把格式存為文字檔案製表符分格試一下呢

c語言寫入檔案為什麼會出現亂碼的現象 10

17樓:金色潛鳥

寫入資料用 fprintf(fp,"%s %s %d 。。。這種方式。不是 fscanf(), 另,注意寫出時的格式裡要有分隔符空格,否內則下次讀檔案時容,字串,數字混在一起無法讀。

允許同時「讀寫」的檔案,要注意讀寫位置的控制,必要時用到 迴繞檔案,或fseek。

18樓:太平洋電腦網

解壓檔案出現中文亂碼怎麼辦解決辦法

19樓:皖

應該是哪一句邏輯有問題

如下:為什麼c語言讀取檔案中的資料並輸出時有亂碼出現?本來輸入的是數字,然後從檔案中讀取後就變漢字 10

20樓:匿名使用者

估計是你文字的儲存格式問題。重新另存為一份utf-8格式的檔案。utf-8編碼格式中的數字佔用一個位元組。而ansi或其他字元是佔用兩個位元組的。

c語言關於檔案的讀寫,為什麼輸出到檔案上得到亂碼

21樓:匿名使用者

windows下,編碼問題也有可能

vc++6.0以上不存在這種可能

gcc編譯器,輸入/出預設utf-8,所以在windows下有問題,新增-finput-charset=gbk -fexec-charset=gbk

也有可能是輸出檔案編碼問題,就是windows的記事本,不支援輸出的檔案的編碼(mac居多),你換一個編輯器看看,比如ultraedit。這個是很正常的,比如你在檔案裡輸出一個換行符時,用記事本開啟輸出檔案,則發現變成空格了,實際是記事本讀不了

22樓:顧_城丶

你把id num也用char定義試試

c語言輸入輸出函式的格式,C語言輸入輸出格式

一 格式輸出函式printf 1 呼叫形式一般為 printf 格式化控制字串 輸出表列 2 格式化控制字串用於指定輸出格式,它有三種形式 1 格式說明符 規定了相應輸出表列內容的輸出格式,以 打頭,如 d o等 2 轉義字元 用來輸出轉義字元所代表的控制 或者特殊字元,比如常用的 n t 3 普通...

c語言程式設計有整數a,b,c,由鍵盤輸入,輸出其中最大的

include int main 一樓也是正解啊 這問號表示式用的 剛剛滴啊 三目運算子做的 include void main 像這樣的程式 建議多想一下,include int main include void main 例 輸入三個整數,輸出最大數和最小數。main else if max ...

以下c語言程式為什麼不會輸出Q,為什麼C語言程式執行輸入後沒有輸出

while c q 當c不等於q時,執行大括號內的語句 所以當輸入一個q時,c等於q,while語句的條件判斷變成了假,迴圈就結束,大括號內的列印語句沒有執行,自然也不會有q被列印出來了。c為q時,你的程式就退出了!當輸入為 q 時就不滿足while的條件自然不會輸出 q 你的輸出是在while中做...