當前位置:首頁 » 編程語言 » c語言文件寫入的是亂碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言文件寫入的是亂碼

發布時間: 2022-05-25 17:02:33

c語言寫入文件為什麼會出現亂碼的現象

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

② C語言中指針讀寫文件,問什麼記事本都是亂碼,怎麼改呢

從代碼看,在Windows平台是有大概率會亂碼,假如你的商品信息數組里存放了換行就一定會亂碼。

主要問題在文件的打開方式不對,fread, fwrite函數最好以二進制模式打開文件,即打開方式加上b,即(rb, wb)。在unix/Linux系統應該沒問題。以下是問題解釋:

二進制和文本模式的區別

1.在windows系統中,文本模式下,文件以""代表換行。若以文本模式打開文件,並用fputs等函數寫入換行符" "時,函數會自動在" "前面加上" "。即實際寫入文件的是"" 。

2.在類Unix/Linux系統中文本模式下,文件以" "代表換行。所以Linux系統中在文本模式和二進制模式下並無區別。

(2)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+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。

③ c語言寫出文件是亂碼

fprintf調用的不對.

另外,你用fprintf寫, 就該用fscanf讀取 而不是fread

以下供參考.

voidsave_file(STUDENTSstu[],intsum)
{intc=0;
FILE*fp=fopen("圖書管理.txt","w");
fprintf(fp,"%d%s%s%s%f%d ",stu[k].num,stu[k].name,stu[k].press,stu[k].price,stu[k].shuliang);
fclose(fp);
}
intread_file(STUDENTSstu[])
{FILE*fp;
inti=0;
if((fp=fopen("stu.txt","r"))==NULL)
{printf(" —————庫存文件不存在!請創");
return0;
}
while(feof(fp)!=1)
{
fscanf(fp,"%d%s%s%s%f%d",&stu[i].num,stu[i].name,stu[i].press,&stu[i].price,&stu[i].shuliang);
if(stu[i].num==0)
break;
else
i++;
}
fclose(fp);
returni;
}

另外, 寫文件的時候k是什麼? 正常來說應該是循環寫入整個數組的. 這部分可能還有問題.

④ C語言fwrite寫入文件後為什麼出現亂碼

這個函數以二進制形式對文件進行操作。

按數據定義結構的寫入保持數據結構的長度,對於數值類型,再用文本方式打開時表現為亂碼。例如float a=12345.67,寫入文件後為4個位元組,打開後不是文本表示的8個位元組。

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

(4)c語言文件寫入的是亂碼擴展閱讀:

返回實際寫入的數據項個數count。

說明:這個與文件的打開模式有關,如果是w+,則是從file pointer指向的地址開始寫,替換掉之後的內容,文件的長度可以不變,stream的位置移動count個數;如果是a+,則從文件的末尾開始添加,文件長度加大。

fseek對此函數有作用,但是fwrite函數寫到用戶空間緩沖區,並未同步到文件中,所以修改後要將內存與文件同步可以用fflush(FILE *fp)函數同步。

⑤ 用C語言編寫文件為什麼文件里是亂碼

第一個程序:
1. 你是想輸入26個字母吧,那緩沖區長度不夠,結尾要預留一個'\0'字元,char str[26] 至少要改成 char str[27]
2. 將字元輸入文件時,不要寫最後一個字元'\0', fwrite(str,1,27,fp) 改為 fwrite(str,1,26,fp); 原因是,文本文件當中是無須'\0'的,可能會導致亂碼
3 字元讀出來了之後,也要加上 str[26] = '\0' 語句

第二個程序:
1. 緩沖區不夠, char str[26], 改為 char str[27]
2. 讀取文件函數寫錯鳥,fwrite 改為 fread; 不要搞 fputs 了,文件是以"r"只讀模式打開的
3 假使你把字元讀出來了,也要加上 str[26] = '\0' 語句

#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[100];
FILE *fp;
if((fp=fopen("字元串.dat","w"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
gets(str);
fwrite(str,1,26,fp);
fclose(fp);
if((fp=fopen("字元串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fread(str,1,26,fp);
str[26] = '\0';
printf("%s\n",str);
fclose(fp);
return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char str[100];
if((fp=fopen("字元串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fread(str,1,26,fp);
str[26]='\0';
printf("%s\n",str);
fclose(fp);
return 0;
}

⑥ C語言寫文件亂碼 求解

雖然你的名字叫contact_list.txt,但你用fwrite(cp+i,sizeof(CARD),1,fp)寫入文件,實際寫入的是
二進制文件
,直接點開contact_list.txt肯定是
亂碼
的。如果不希望這樣的話,可以考慮用fprintf寫文件,當然了,要自己實現下把CARD和寫入字元串的轉換。

⑦ C語言中寫文件,為什麼寫出的是亂碼呢,求大

fp=fopen("stud.dat","wb"); //你建立的是二進制文件,這種文件用記事本打開就是亂碼,這是正常的。

⑧ 急!C語言編程~寫入文件的數據變成亂碼是怎麼回事

結構體類型寫入文件,那麼保存的必然是二進制數據,直接看文件肯定是亂碼的。如果想文件內容是直接可看的,那麼不要直接存儲結構體,應該自己設計這個文件的文本格式,按文本方式存儲數據。