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語言的設計目標是提供一種能以簡...