C語言檔案讀寫問題,在檔案裡隨便寫字串,為什麼讀出來之後是亂碼

2021-05-19 21:57:43 字數 6154 閱讀 9064

1樓:匿名使用者

我表示今天同樣的問題,最後發現是檔案流中的偏移量的問題。造成的。呼叫fseek()將偏移量弄到檔案開頭,就成了

2樓:

沒加結束符卻當作字串用!亂碼已經是最好的結果了!read,只是讀出一定數量的資料,並沒有義務給你的資料加字串結束符!

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

3樓:匿名使用者

windows下,編碼問題也有可能

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

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

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

4樓:顧_城丶

你把id num也用char定義試試

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

5樓:匿名使用者

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;}

6樓:金色潛鳥

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

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

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

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

7樓:

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

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

8樓:匿名使用者

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

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

試試看!!

c語言讀取檔案資料亂碼

9樓:可以叫我表哥

參考**如下:

#include

#include

#include

int main()

return 0;}

10樓:匿名使用者

把開啟方式改為 "r"以及把讀取資訊用fscanf吧,因為如果你是原先先把kk.txt寫好,然後再用你的程式開啟它的話,由於裡面有換行符以及空格等內容,除非開始你是用fwrite函式寫入的結構資訊,否則fread會把這些都作為資訊讀取的(也就是說它讀到一個struct student_type大小的資料就結束,而不管這裡面到底存放的是什麼,這個過程中讀到的可能不是一個完整的結構的資料),所以就會出現你所說的亂碼。

11樓:匿名使用者

給你一個你參考下就行了

#include

using namespace std;

void creat()//建立檔案並且輸入資訊fprintf(fp,"%-10s%-20s%-50s\n","姓名","**號碼","住址");

cout<<"請依次輸入姓名、**號碼、住址(以0結束)\n";

cin>>name;

while(strcmp(name,"0"))fclose(fp);

}void output()//輸出檔案的內容cout<<"\t通訊錄\n";

while(!feof(fp))

fclose(fp);

}int main()

while(!feof(fp))

fclose(fp);

}int main()

c語言在txt檔案裡寫入一個數為什麼是亂碼啊

12樓:匿名使用者

int pt;

......

scanf("%d", &pt);

fputs(&pt, j); //把pt所在記憶體中的資料當作字串存入檔案?

錯在這裡,極大的可能出現記憶體訪問越界。讀入整數後,應該將其轉為字串,再寫入檔案。例如

scanf("%d",&pt);

char str[100]="";

sprintf(str,"%d\n",pt); //把整數轉為字串fputs(str,j);

...後面fgets也是錯誤的,是很危險的寫法。

13樓:匿名使用者

fopen的使用應該對讀寫分開使用.

使用fputs函式,輸入的整數串存入檔案時,按照2進位制存入,結果可能會不可見.

存入時應該按照fprintf()函式,取出時也按照fscanf(),按如下修改就好了,在dev c++通過測試:

#include

#include

#include

void putss();

int main()

fprintf(j, "%d\n", pt);

fclose(j) ;

}else if(a == 2)

fscanf(j, "%d\n", &pt);

printf("%d\n",pt);

fclose(j) ;

}system("pause");

return 0;

}void putss()

14樓:匿名使用者

輸入的型別應該是char吧,你試試

c語言,字串輸出是亂碼

15樓:

#include

#include

#include

int random(int num);

void main()

printf("請依次輸入學生姓名:");

for(i=0;i被點到的同學的名字是:");

printf("%s ",p[random(n-1)]);

}int random(int num)

16樓:匿名使用者

你好沒有亂碼

就是邏輯上有些錯誤如圖:

17樓:匿名使用者

按照程式是在a字元

串中隔一個字元取一個形成b字串

void main()

half(a);

}輸出24680bdfhj

如果出亂碼,可能你的a陣列賦值方面有問題,不知道你是如何定義a陣列和呼叫函式的

18樓:匿名使用者

輸出亂碼是必須的,

因為你的資料型別搞錯了,

你使用的是字元函式stringcopy()來拷貝字元;

那麼要處理的資料當是char型別,

然而你所定義的指標應當也是char型別;

你應當修改的地方是

int *str1,*str2;//請將int改為char

19樓:匿名使用者

沒什麼問題,第一個for迴圈後多了一個分號;只要保證你傳入該函式的陣列a中有準確的二十個字元就行,如:char a=;

20樓:

while(1)

else }

21樓:匿名使用者

把讀迴圈改為 : while(fgets(str,120,fp) != null) printf("%s\n",str);

這樣就不需要直接檢查檔案是否結束,這是因為fgets()函式在讀滿120個字元或遇到'\n'時,就返回str的首址。在讀檔案時,測試是否到檔案結束經常出錯,我看見高手們都很少使用feof();函式,原因大概在此吧!

22樓:匿名使用者

原因向他們說的那樣, char a是一個區域性變數, 函式返回後他在棧上的空間就自動釋放了...

可以這樣改下:

#include

#include

#include

#include

using namespace std;

#define max_len 10

char* getnick()

return a;

}void main()

23樓:匿名使用者

getnick函式內的陣列a是區域性陣列,在棧上分配空間``,當getnick執行完後,棧空間會被**

可把a定義為全域性變數或動態申請空間(在堆中分配空間)

24樓:匿名使用者

getnick 返回的a,是一個區域性變數,當getnick返回後,這個變數就無效了,這個變數所指記憶體中的內容變得不可**,列印出來的當然不行了。你要麼把 a 宣告在函式外面,作一個全域性變數,要麼在getnick裡

static char a = ....;

25樓:匿名使用者

你的 str2 沒有加結束字元

加上 str2[n] = '\0';

就能濾掉後面的亂碼了

26樓:匿名使用者

if( !(file = fopen(name, "wb")))

你是以二進位制的方式開啟檔案的,用「w+」吧: fopen(name, "w+")

27樓:匿名使用者

#include

int main()

str2[n]='\0';

}puts(str2);

putchar('\n');

return 0;

}就是 str2 的結束加上結束符『\0』

c語言檔案操作讀取亂碼

28樓:匿名使用者

你的**想實現什麼功能呢?

從寫法上,看不出來想做什麼。

先寫了一個字元,然後讀下一個字元,一直讀到檔案尾,這樣自然是檔案裡面有什麼 就會顯示什麼了。

除了第一個字元是a外,後面的 都是檔案裡面本來的內容。

29樓:風雷雪電

錯誤一:沒有「wr」這種模式,如果既要讀,又要寫,那麼可以用」w+「。

錯誤二:雖然w+的檔案既允許讀,又允許寫,但讀和寫之間至少有一個移動檔案指標的函式:fseek,哪怕移動0格,也必須要用fseek函式。(參考文獻:c primer 第五版)

警告三:要確定作業系統為你的程式開放了c盤根目錄直接建立、修改檔案的訪問許可權。

參考程式:

void main()

fputc('a',fp);

fseek(fp,-1,seek_cur);

ch=fgetc(fp);

while(ch!=eof)

fclose(fp);

}fseek第二個引數是偏移量,-1表示往前挪一格。

fseek第三個引數是偏移位置,seek_cur是從當前處開始,seek_set是從檔案開頭開始,seek_end是從檔案末尾開始。

c 檔案包含問題,C語言檔案包含相關問題

我很抱歉地告訴你,按照標準的c 來說,你寫的兩個程式都是不標準的。這是由於標頭檔案和名稱空間的不標準使用所引起的。建議找本標準的c 教材仔細研讀一下。給你看幾個標準的吧 1 最方便的宣告。include using namespace std int main c 標頭檔案有兩種寫法。include...

菜鳥的問題關於c語言中檔案的讀寫操作讀出

你這個是大整數加減法運算嘛,c 有沒有學過,我這有一份現成的 是有stl做的。include include include using namespace std class bigintadd 整數輸入函式 istream operator istream in,bigintadd number...

C 開啟文字檔案,C 如何對檔案進行讀寫

用這個 txt路徑 或者參考一下這個,這是開啟word文件的舉例 docword new docword l swppp 自己改一下。d 也許我dignostic拼錯了,反正有智慧提示,你看一下。c 怎樣通過檔案路徑直接開啟檔案 一 開啟 microsoftvisualstudio2008 二 在白...