檔案IO中read 函式讀取輸出字串有亂碼

2021-10-05 03:30:28 字數 2383 閱讀 6878

更多資料:我的目錄

問題如圖,輸出後(第三行)後面輸出有亂碼。原因是所定義的陣列、函式引數(輸入、輸出字串長度等)是用變數的,輸入字串中含有空格,通俗地說就是到了字串末尾時,read()函式分不清這是個空格還是結束符,然後就跟著一串亂碼出來,如果你的字串沒有空格的話,它是不會出現亂碼的。

解決辦法:

①在read()函式前加入一句:

buf_r[len] = '\0'; //給陣列buf_r最後一位賦值為'\0'換行符,當read()函式讀到'\0'時,就停止讀取,就不會輸出亂碼。

②將所有用變數定義的引數,改為定值 ,比如:

char buf_r[

100]=;

//變數 char buf_r=;

size=

read

(fd,buf_r,

100));

//變數 size=read(fd,buf_r,len));

size=

read

(fd,buf_r,

100));

//變數 size=read(fd,buf_r,sizeof(buf_r))) ;

#include

#include

#include

#include

#include

#include

#include

intmain

(void);

//char buf_r[100]=;//改為定值

len =

strlen

(buf)

;/*******************open()********************************/if(

(fd=

open

("jiajia.c"

, o_creat | o_trunc | o_rdwr,

0666))

<0)

//建立開啟jiajia.c檔案(刪除原有資料),檔案可讀可寫

else

printf

("open file:jiajia.c %d\n"

,fd)

;//如果開啟成功,返回值fd>0的檔案描述符,也就是jiajia.c編號

/*******************write()*********************************/if(

(size=

write

(fd,buf,len)

)<0)

//把buf字串通過fd描述符寫入jiajia.c中,寫入的長度為字串的長度。

else

printf

("write:%s\n"

,buf)

;/******************lseek()*********************************/

lseek

( fd,0,

seek_set);

//通過write(fd,buf,len)函式之後,fd的指標偏移量直接指向寫入的最後乙個字元。現通過lseek()函式,根據引數重新把fd偏移量移到0位置(開頭位置)

/*******************resd()*********************************/

buf_r[len]

='\0'

;//給陣列buf_r最後一位賦值為'\0'換行符,當read()函式讀到'\0'時,就停止讀取。if(

(size=

read

(fd,buf_r,len)

)<0)

//通過fd描述符把jiajia.c的字串(write()函式寫入的字串)讀取出來,然後把讀取出來的字串(小於10個字元)存放在r_buf字串中。

else

printf

("read form file:%s\n"

,buf_r)

;/********************close()********************************/if(

close

(fd)

<0)

//關閉開啟jiajia.c函式

else

printf

("close jiajia.c\n");

/**********************退出函式******************************/

exit(0

);//退出

//return 0;

}

C 通過Read函式讀取檔案

通過read函式將檔案中的資料按照一定的長度讀取出來並且存放在新的陣列中。函式原型istream read char s,streamsize n 用來暫存內容的陣列 必須是char 型 以及流的長度比如我們要讀取txt檔案中的內容ifstream in test.txt 先通過檔案流將流與txt檔...

IO檔案操作函式read 和write

函式read 和write lseek 和close 的基本使用與試驗,實現檔案的寫入 讀取 移位 關閉 include include include include include include includeint main else printf open file hello.c d n...

檔案I O(不帶緩衝)之read函式

呼叫read函式從開啟檔案中讀資料。include ssize t read int filedes,void buf,size t nbytest 返回值 若成功則返回讀到的位元組數,若已讀到檔案結尾則返回0,若出錯則返回 1。有多種情況可是實際讀到的位元組數少於要求讀的位元組數 讀操作從檔案的當...