C語言的問題,fread和fgets的區別是什麼

時間 2021-09-07 13:11:08

1樓:夜禮服假面

fread和 fgets的區別:

fread :以位元組位計算長度,按照指定的長度和次數讀取資料,遇到結尾或完成指定長度讀取後停止.

fgets :整行讀取,遇到回車換行或結尾停止.在文字方式時使用.

讀字串函式fgets函式的功能是從指定的檔案中讀一個字串到字元陣列中,函式呼叫的形式為:

fgets(字元陣列名,n,檔案指標);

其中的n是一個正整數。表示從檔案中讀出的字串不超過 n-1個字元。在讀入的最後一個字元後加上串結束標誌'\0'。

例如:fgets(str,n,fp);的意義是從fp所指的檔案中讀出n-1個字元送入字元陣列str中。(按行讀取)fgets()每次讀入一行就會指向下一行.

所以把前面10行讀進去了就清除. 然後下一次fgets()就是第十一行了.

fgets()怎麼每次都是讀一行?你怎麼設定?

fread是用於整塊資料的讀寫函式,可用來讀寫一組資料,如一個陣列元素,一個結構變數的值等。

讀資料塊函式呼叫的一般形式為: fread(buffer,size,count,fp),其中:

buffer是一個指標,在fread函式中,它表示存放輸入資料的首地址。

size 表示資料塊的位元組數。

count 表示要讀寫的資料塊塊數。

fp 表示檔案指標。

例如: fread(fa,4,5,fp);

其意義是從fp所指的檔案中,每次讀4個位元組(一個實數)送入實陣列fa中,連續讀5次,即讀5個實數到fa中。

fread -- 讀取檔案(可安全用於二進位制檔案)在區分二進位制檔案和文字檔案的系統上(如 windows)開啟檔案時,fopen()

函式的 mode 引數要加上 'b'。$handle = fopen($filename, "rb");

2樓:匿名使用者

fread()函式通常用於讀取二進位制資料,用它可以精確的指定要讀取多少位元組的資料.

fgets()函式通常用於讀取ascii文字,它的引數是一個字元陣列.

3樓:黃邦勇帥哥哥

fread讀入的內容不包括最後的字串終結符,而fgets則包括這個,也就是說fread讀入的內容不是字串,因為少一個終結符,而fgets則讀入的是一個字串。

至於if(p)這個問題應該很明瞭,雖然p是指值,但是可以讓指標指向null,這樣的話就可以使用if(p)來判斷指標是否指向了記憶體,若沒有就跳過語句。

4樓:l語言之父

讀字串函式fgets函式的功能是從指定的檔案中讀一個字串到字元陣列中,函式呼叫的形式為: fgets(字元陣列名,n,檔案指標); 其中的n是一個正整數。表示從檔案中讀出的字串不超過 n-1個字元。

在讀入的最後一個字元後加上串結束標誌'\0'。例如:fgets(str,n,fp);的意義是從fp所指的檔案中讀出n-1個字元送入字元陣列str中。

fread是用於整塊資料的讀寫函式,可用來讀寫一組資料,如一個陣列元素,一個結構變數的值等。讀資料塊函式呼叫的一般形式為: fread(buffer,size,count,fp),其中buffer是一個指標,在fread函式中,它表示存放輸入資料的首地址。

size 表示資料塊的位元組數。count 表示要讀寫的資料塊塊數。fp 表示檔案指標。

例如:fread(fa,4,5,fp); 其意義是從fp所指的檔案中,每次讀4個位元組(一個實數)送入實陣列fa中,連續讀5次,即讀5個實數到fa中。

5樓:匿名使用者

fgets函式用來從檔案中讀入字串。fgets函式的呼叫形式如下:fgets(str,n,fp);此處,fp是檔案指標;str是存放在字串的起始地址;n是一個int型別變數。

函式的功能是從fp所指檔案中讀入n-1個字元放入str為起始地址的空間內;如果在未讀滿n-1個字元之時,已讀到一個換行符或一個eof(檔案結束標誌),則結束本次讀操作,讀入的字串中最後包含讀到的換行符。因此,確切地說,呼叫fgets函式時,最多隻能讀入n-1個字元。讀入結束後,系統將自動在最後加'\0',並以str作為函式值返回。

int fread(void *ptr, int size, int nitems, file *stream);

參 數:用於接收資料的地址(指標)(ptr)

單個元素的大小(size)

元素個數(nitems)

提供資料的檔案指標(stream)

一個是讀字串,一個是讀取指定大小的資料,

當然結果會不一樣。

因為如果在未讀滿n-1個字元之時,已讀到一個換行符或一個eof(檔案結束標誌),則結束本次讀操作,所以fgets之後fp不會越界。

p是指標,

如果p=strchr(xx[i],'\n');

xx[i]中沒有'\n',則p=null.

而null就是0.就不進入迴圈,就是說讀取字元中,沒有遇到換行符。根據fgets()知道最後一個就是字串結束符‘\0';

如果xx[i]中有'\n',則p!=null,p指向第一個出現換行符的地方。

進入迴圈,另換行符變成字串結束符‘\0';

因為‘\0'的ascii碼值為0;

所以寫成了*p=0;

不知道說清楚沒,希望對你有幫助。

c語言fread返回總是,c語言fread 返回總是

1 返回0通常是讀到了檔案尾。如果確認沒有到檔案尾,可以用ferror檢查錯誤。if ferror fp 2 c語言中 fread是一個函式。從一個檔案流中讀資料,最多讀取count個元素,每個元素size位元組,如果呼叫成功返回實際讀取到的元素個數,如果不成功或讀到檔案末尾返回 0。函式原型 si...

C語言問題,C語言問題C語言問題

選a首先,空格也是一種字元,b d選項分別把空格賦給了c1,c1 其次,c選項不完整,排除 不僅a這樣,10a20b也是可以的。 聽不清啊 答案a 10a 20b cr 是正確的。因為scanf d c 時,會忽略數字前面的空格,遇到非數字字元就會結束讀取 非數字字元會留待下一次讀取,即被後面的 c...

c語言的問題,C語言問題?

魘傳說 這個 的作用就是利用do while將陣列算出來,然後利用for迴圈遍歷,倒序輸出陣列。我感覺很奇怪,devc 出來的結果是10010。我算出來的結果應該是00010,因為強轉int型別應該是取0的,而不是取1.然後我用c 試了多個數字,發現所有的結果都是以1開頭,至於為什麼我也不知道,希望...