c語言fread函式讀取檔案問題

2021-10-17 04:51:00 字數 5228 閱讀 8546

1樓:匿名使用者

你寫入文字檔案後,資料是用ascii碼串的形式來表示,已經不是二進位制資料了,因此需要用fscanf函式來讀取,試試如下程式:

#include

#include

struct hj

main()

fclose(fp);}

2樓:匿名使用者

fread是一個函式。從一個檔案流中讀資料,最多讀取count個元素,每個元素size位元組,如果呼叫成功返回實際讀取到的元素個數,如果不成功或讀到檔案末尾返回 0。

函式原型

size_t fread ( void *buffer, size_t size, size_t count, file *stream) ;

參 數buffer

用於接收資料的記憶體地址

size

要讀的每個資料項的位元組數,單位是位元組

count

要讀count個資料項,每個資料項size個位元組.

stream

輸入流返回值

實際讀取的元素個數。如果返回值與count不相同,則可能檔案結尾或發生錯誤。從ferror和feof獲取錯誤資訊或檢測是否到達檔案結尾。

3樓:匿名使用者

讀取位元組出錯了 應該是28位元組 而不是20 最好用siezof(struct hj)

不要你手動輸入資料 最好用程式將資料整塊寫入文字中 要嗎你就用fscanf 和fsprintf對應著來

4樓:半季流年

fread是用二進位制方式讀取二進位制檔案,讀取的資料必須是用對應的fwrite寫入的,而你讀取的是文字格式的檔案當然就不行了!

你可以試試用fscanf讀取。

5樓:

fread(&d[i],20,1,fp);這句不是讀的

比如 freed(p,20,1,fp) p是一個已經分配的空間的指標 fread(d[j].dianh,10,1,lp);

freed(d[j].gaoc,10,1,lp);

c語言中用fread和fwrite函式讀資料時怎樣判斷檔案結束?

6樓:佩奇爸爸有看法

使用feof()來判斷,返回非0就是結束了。

if (feof(fp))

...... 此時就表明檔案結束了,別再讀了

7樓:匿名使用者

feof(fp)!=0 則檔案結束

8樓:匿名使用者

file* fp = .....

while(!feof(fp))

9樓:永星天恆

fread函式可通過返回值來判斷檔案是否結束

fwrite函式無法直接判斷

c語言fread()返回總是0

10樓:匿名使用者

1、返回0通常是讀到了檔案尾。如果確認沒有到檔案尾,可以用ferror檢查錯誤。

if ( ferror ( fp ) )

2、c語言中:fread是一個函式。從一個檔案流中讀資料,最多讀取count個元素,每個元素size位元組,如果呼叫成功返回實際讀取到的元素個數,如果不成功或讀到檔案末尾返回 0。

函式原型:size_t fread ( void *buffer, size_t size, size_t count, file *stream) ;

引數:buffer 用於接收資料的記憶體地址

size 要讀的每個資料項的位元組數,單位是位元組

count 要讀資料項的個數,每個資料項size個位元組.

stream 輸入流的指標

返回值:

返回實際讀取的元素個數。如果返回值與count不相同,則可能檔案結尾或發生錯誤。從ferror和feof獲取錯誤資訊或檢測是否到達檔案結尾。

例項:#include

#include

int main(void)

fwrite(msg,1,strlen(msg)+1,stream);

fseek(stream,0,seek_set);

fread(buf,strlen(msg)+1,1,stream);

printf("%s\n",buf);

fclose(stream);

return0;}

11樓:匿名使用者

你沒有檢查fopen不成功的情況,即

fptr = fopen("codec.bin", "rb"); //載入資料

後加if(fptr ==null)

可能是開啟檔案錯誤造成的。

12樓:甕瑗

"codec.bin"的路徑關係對麼?預設走當前路徑,但是根據編譯環境,可能會有不同路徑效果。嘗試一下用絕對路徑。

fseek設定一下讀寫位置到檔案頭。

如果還不行,你就把開啟方式變成可讀寫的二進位制,然後一次讀一個位元組。

就不信丫不聽話

13樓:匿名使用者

不會是codec.bin檔案裡面就是空的吧。。。

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

14樓:夜禮服假面

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");

15樓:匿名使用者

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

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

16樓:黃邦勇帥哥哥

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

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

17樓: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中。

18樓:匿名使用者

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;

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

linu下c語言從檔案讀取資料到陣列的問題

如果你不知道檔案中資料寫入時型別順序 即,比如先往檔案寫入乙個整型,再寫入乙個浮點型,那麼你讀取的話也應該先讀取乙個整型,再讀取乙個浮點型的順序 那麼你對檔案的讀取是非常困難的.除非是文字型別的檔案,文字型別的檔案都是可以按乙個字元乙個字元讀取的,但是二進位制檔案必須按寫入型別的順序讀取才能保證資料...

c語言檔案讀取十六進製制資料問題,例如檔案中資料是 0x

include int main void c語言中十六進製制數判斷問題!字元資料在機器裡存的方式是一樣的,進製只是表示方式。比如輸入了乙個字元 a 那麼它在機器裡面就是01100001,因為機器都是2進製存的。那麼它的十進位制表示就是97,十六進製制就是61。c語言判斷乙個數字是多少進製是通過開頭...

c語言如何實現從文字檔案裡讀取數字

可以通過fscanf,從檔案中依次讀取資料。當fscanf返回eof時,表示讀到檔案結尾,這時停止讀取即可。以檔案中儲存的為空格分隔的整型字元為例,可以寫作 從開啟的檔案指標fp指向的檔案讀資料,每次讀乙個整型,直至檔案結尾。c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡...