為什麼我用C語言讀入的檔案是亂碼流

2021-03-19 18:20:35 字數 3029 閱讀 8129

1樓:沒有水印的鈔票

你**呢?檢查一下你的檔案識別符號是不是在讀之前就移到了檔案尾,一般都是這種情況,再不就是檔案本身寫入就有問題。

2樓:匿名使用者

啥檔案?讀寫函式不認識編碼格式的,要自己轉的

c語言這樣寫為什麼輸出到檔案的是亂碼?求指教!

3樓:匿名使用者

真是大哥,我告訴你為什麼因為我也遇到過你用fprintf和fscanf語句進行檔案的讀取和儲存,絕對不會出現這種問題的!!!

4樓:匿名使用者

#include

#include

int main()

while(a != 100000)

fclose(fp);

return 0;}

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

5樓:匿名使用者

windows下,編碼問題也有可能

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

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

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

6樓:顧_城丶

你把id num也用char定義試試

7樓:緩緩掉落的松針

把fwrite改成fprintf試試。

fprintf(fp,"%d %d %s\n",st[i].id,st[i].num,st[i].name);

c語言讀取txt檔案開頭出現亂碼

8樓:

這是因為你的txt檔案的編碼和編譯器選擇的編碼不一致而導致的。

按你使用的作業系統不同,如果是windows,可以直接用記事本開啟檔案,選擇另存為——編碼——ansi,儲存後重新開啟。

如果是linux,用編輯器開啟檔案後另存為無bom的utf-8格式。一般來說可以解決問題。

解釋一下,在中文的windows系統中,選擇另存為ansi編碼,實際上是儲存為了gbk或類似的、當前win系統最相容的編碼方式。

在linux中,無bom的utf-8格式應該說是最常用最方便的編碼。

9樓:匿名使用者

你的123.txt檔案是utf8格式的檔案,前面三個是utf檔案bof碼0xefbbbf,用記事本開啟該檔案,另存為編碼為ansi檔案就可以了

10樓:匿名使用者

你好!!

程式執行過了,沒有你說的現象,你開啟txt檔案看看,是不是txt檔案有問題

11樓:匿名使用者

《.txt》 改成 《.c》 檔案格式。

c語言讀入寫出檔案,寫出檔案時出現個別亂碼。

12樓:李金陽

出問題的原因是你ftell得到的長度和你fread實際讀到的位元組數不符,原因是windows把回車看作/r/n2個字元,ftell讀的時候也按2個算,但是fread讀的時候卻算一個,就是\n ,這就導致你fwrite的時候比你fread到的要多。

解決辦法就是你可以定義一個額外的整數n來記錄讀到的字元數,並把下面2句改成這樣:

/*把檔案拷貝到buffer中*/

n=fread(buffer,1,lsize,pfile);

/*寫入新檔案中*/

fwrite(buffer,1,n,newfile);

你可以先不改然後把測試檔案內容刪到只剩下一行,就不會出這個問題

13樓:匿名使用者

1、c語言標準庫提供了一系列檔案操作函式。檔案操作函式一般以f+單詞的形式來命名(f是file的簡寫),其宣告位於stdio.h標頭檔案當中。

例如:fopen、fclose函式用於檔案開啟與關閉;fscanf、fgets函式用於檔案讀取;fprintf、fputs函式用於檔案寫入;ftell、fseek函式用於檔案操作位置的獲取與設定。

2、例程:

#include

int a;

char b,c[100];

int main()

fscanf(fp1,"%d",&a);//從輸入檔案讀取一個整數b=fgetc(fp1);//從輸入檔案讀取一個字元fgets(c,100,fp1);//從輸入檔案讀取一行字串printf("%ld",ftell(fp1));//輸出fp1指標當前位置相對於檔案首的偏移位元組數

fputs(c,fp2);//向輸出檔案寫入一行字串fputc(b,fp2);//向輸出檔案寫入一個字元fprintf(fp2,"%d",a);//向輸出檔案寫入一個整數fclose(fp1);//關閉輸入檔案

fclose(fp2);//關閉輸出檔案,相當於儲存return 0;}

14樓:金色潛鳥

fread() 和 fwrite() 用於2進位制檔案讀寫。

也就是說,你開啟檔案時,無論讀還是寫 要有選項 b, 例如 "rb","wb".

文字檔案,按2進位制方式開啟,就會按2進位制方法處理。

改正你的 fopen 裡的 選項,就可解決問題。

15樓:

應該是在 fread之後 fwrite之前加上一句話 buffer[isize] = '\0';

出現 屯 的原因,是沒找到結束符.

16樓:匿名使用者

buffer = (char*)malloc(sizeof(char)*( lsize +1)); //修改這一

句zeromemory(buffer ,sizeof(char)*( lsize +1)); //緊隨其後加入這一句

試試看!!

C語言中寫檔案,為什麼寫出的是亂碼呢,求大

fp fopen stud.dat wb 你建立的是二進位制檔案,這種檔案用記事本開啟就是亂碼,這是正常的。寫檔案時就用的二進位制寫的 用記事本開啟時是ascii碼 所以看著亂碼 沒關係 還可以再正常讀進去的 平常都這樣用二進位制讀寫也沒什麼問題 c語言在txt檔案裡寫入一個數為什麼是亂碼啊 int...

c在c語言程式設計裡是做什麼用的, c 在C語言程式設計裡是做什麼用的??

通過你的描述我大概知道你要表述的意思了,fscanf是進行檔案讀取操作,而檔案中資料的存放格式是用中間 來描述規範的,當然,第一項大家都知道,是開啟檔案的指標 file,這裡是output fopen 至於第三項,是要儲存的位置,你的情況是 c字元,而 c就是檔案中的間隔符。有沒完整點的 啊。實在沒...

C語言標頭檔案都是什麼程式程式設計的?會C語言了就會編標頭檔案了嗎

1全部其實寫一個c語言程式可以完全不用標頭檔案。對 include指令,編譯過程中只是在預處理階段把包含的檔案以文字形式完全替換到 include所在的那一行而已。由此可以看出,標頭檔案內容也是編譯器 在預處理之後 編譯的,如果自己在原始檔裡面寫標頭檔案的內容,可以不用 include。學會c語言就...