A. 用C語言編寫文件為什麼文件里是亂碼
abcdefghijklmnopqrstuvwxyz
Press any key to continue
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char str[27]={0}; // 問題 一 長度不夠 問題二 沒有初始化
if((fp=fopen("字元串.dat","r"))==NULL)
{
printf("can't find the file!\n");
exit(0);
}
fread(str,1,27,fp); //問題三 是fread 不是 fwrite 問題四 注意長度 27
printf("%s\n",str);
fclose(fp);
return 0;
}
B. c語言編譯運行亂碼是什麼原因
這種情況多數是由於操作系統的語言選項不正確引起的。建議你查看一下控制面板中的區域和語言選項,特別是有關「非Unicode程序的語言」,一定要選擇成「中文(簡體,中國)」。然後重啟電腦。
C. C語言fwrite寫入文件後為什麼出現亂碼
這個函數以二進制形式對文件進行操作。
按數據定義結構的寫入保持數據結構的長度,對於數值類型,再用文本方式打開時表現為亂碼。例如float a=12345.67,寫入文件後為4個位元組,打開後不是文本表示的8個位元組。
寫入數據用fprintf(fp,"%s %s %d 這種方式。不是 fscanf(), 另,注意寫出時的格式里要有分隔符空格,否則下次讀文件時shu,字元串,數字混在一起無法讀。允許同時「讀寫」的文件,要注意讀寫位置的控制,必要時用到 回繞文件,或fseek。
(3)c寫文件亂碼擴展閱讀:
返回實際寫入的數據項個數count。
說明:這個與文件的打開模式有關,如果是w+,則是從file pointer指向的地址開始寫,替換掉之後的內容,文件的長度可以不變,stream的位置移動count個數;如果是a+,則從文件的末尾開始添加,文件長度加大。
fseek對此函數有作用,但是fwrite函數寫到用戶空間緩沖區,並未同步到文件中,所以修改後要將內存與文件同步可以用fflush(FILE *fp)函數同步。
D. C語言讀入寫出文件,寫出文件時出現個別亂碼。
出問題的原因是你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);
你可以先不改然後把測試文件內容刪到只剩下一行,就不會出這個問題
E. C語言中指針讀寫文件,問什麼記事本都是亂碼,怎麼改呢
從代碼看,在Windows平台是有大概率會亂碼,假如你的商品信息數組里存放了換行就一定會亂碼。
主要問題在文件的打開方式不對,fread, fwrite函數最好以二進制模式打開文件,即打開方式加上b,即(rb, wb)。在unix/Linux系統應該沒問題。以下是問題解釋:
二進制和文本模式的區別
1.在windows系統中,文本模式下,文件以""代表換行。若以文本模式打開文件,並用fputs等函數寫入換行符" "時,函數會自動在" "前面加上" "。即實際寫入文件的是"" 。
2.在類Unix/Linux系統中文本模式下,文件以" "代表換行。所以Linux系統中在文本模式和二進制模式下並無區別。
(5)c寫文件亂碼擴展閱讀:
ffopen為C語言編程中所需的一個常用語言,多數用來打開文件。其調用的一般形式為:文件指針名=fopen(文件名,使用文件方式);其中,『』文件指針名」必須是被說明為FILE 類型的指針變數,文件名」是被打開文件的文件名;「使用文件方式」是指文件的類型和操作要求。「文件名」是字元串常量或字元串數組。
基本介紹函數功能:打開一個文件函數原型:FILE * fopen(const char * path,const char * mode);相關函數:open,fclose,fopen_s,_wfopenfopen所需庫:返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。一般而言,打開文件後會做一些文件讀取或寫入的動作,若打開文件失敗,接下來的讀寫動作也無法順利進行,所以一般在fopen()後作錯誤判斷及處理。
參數說明:參數path字元串包含欲打開的文件路徑及文件名,參數mode字元串則代表著流形態。
mode有下列幾種形態字元串:
r 以只讀方式打開文件,該文件必須存在。
r+ 以可讀寫方式打開文件,該文件必須存在。
rb+ 讀寫打開一個二進制文件,允許讀寫數據。
rw+ 讀寫打開一個文本文件,允許讀和寫。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。