關於fread讀取資料時指標的位置問題

時間 2022-12-15 09:45:03

1樓:匿名使用者

這個r我一般是用來檢測檔案的,fread這個函式的返回值就是它讀取了幾次的值,在你這裡fread返回值為1,所以r的值應該是1,如果r值為0,那麼就代表讀取錯誤,一般來說就是檔案讀取完了。可以把作為if語句括號內的表示式。我習慣用這種方式來檢測檔案指標是否到了檔案末尾。

最後一條資料輸出2次這個問題我也遇到過,是檢測檔案是否到末尾的問題,我用while(!feof(fp))就會出現這種問題,應該是判斷檔案指標是否到檔案末尾出現錯誤了,具體原因我也不清楚,不過很容易解決,就是利用類似樓上的r的方式。

while(1)

直接用fread的返回值判斷比較準確,用判斷指標的方式有問題。

檔案指標是移動一個位元組再讀取一個位元組,當讀取完一個結構體之後,檔案指標指向該結構體最後一個位元組,只有進行下次讀取時,檔案指標才會移動,所以當讀取完檔案中最後一個結構體,檔案指標指向的是最後一個結構體的最後一個位元組,而不是檔案末尾——這就像字元陣列,最後一個字母不是末尾,末尾是\0。所以讀取完檔案中最後一個結構體後,檔案指標去沒有移動到檔案末尾。這樣while的迴圈體就要多執行一次。

你問為什麼上面2部分**輸出結果不一樣,那是因為printf的位置不一樣。while的迴圈體會多執行一次,在這一次中fread是不能正確讀取資料的——因為檔案指標的位置,所以printf函式輸出的就是記憶體中原有的結構體,即檔案中的最後一個結構體。你上面那個函式printf在fread前面,即先輸出然後再讀取下一次的,這樣就避免了出錯。

你下面那個呢?先讀取再輸出,這樣問題就來了,讀取出錯,但是輸出可沒出錯,所以就把記憶體中資料給輸出了,所以最後一條資料輸出了2次。

2樓:匿名使用者

上面寫得都不對,正確寫法是:

struct mydata;

int r = 0; struct mydata dat;

file * f = fopen(""rb");

if(!f) return 0;

while(!feof(f)) end whilefclose(f);

注意,需要檢測fread()的返回值,同時迴圈的時候要檢測檔案是否結束feof()!

c fread執行完畢後會使檔案內指標移動嗎?

3樓:網友

會的,指標會根據所給緩衝區移動,比如給的是一個50位元組大小的緩衝區,那麼讀完之後檔案內指標就移動到了第51個位元組的地方。

4樓:匿名使用者

會的,可以使用fseek重新定位檔案指標讀取初始位置。

千分表讀數時為什麼不讀取短指標所指示的數值

5樓:我不是他舅

因為短指標在到之間,讀數不確定,而且零刻度是自己調的,外面一圈等於短指標毫米,因此讀短指標是木有意義的,個人理解,僅供參考。

連續呼叫fread後檔案指標的位置會亂跳,這是怎麼回事啊

6樓:匿名使用者

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

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

讀取檔案的特定位置資料(fread函式),不是從檔案指標首地址。

7樓:華師

讀取檔案的特定位置資料(fread函式),不是從檔案指標首地址。

知道fread函式,放到一個變數裡,我想從檔案的中間讀4個位元組,是檔案的首指標,但是他的第4個引數。

然後再用fread函式來讀就可以了先用fseek函式移動檔案指標到你需要讀取的位置/

8樓:匿名使用者

先用fseek函式移動檔案指標到你需要讀取的位置,然後再用fread函式來讀就可以了。具體**看我的文章。

fread呼叫之後檔案指標位置在哪?fwrite之後又怎樣?

9樓:匿名使用者

寫入abcde,緊接著讀入字元是e後面的字元,如果用fseek(fp,0l,seek_set);返回檔案頭部讀字元a後指標停留在b位置;寫入a後指標會指向下一個空位置;是後移動。

c語言檔案操作問題,用fread讀取一個檔案,讀完全部內容後檔案指標是不是到了檔案末尾?那麼不關閉

10樓:以它石攻玉

試下就知道啦,fread跳轉由自己呼叫函式控制,到尾部應該不會再跳了。

fread和fwrite讀取/寫入結構體資料時,檔案內部位置指標是怎麼變化的。

11樓:匿名使用者

結構體資料一般是在記憶體中緊挨著排列的,在寫入結構體時,會整個結構一起寫入,檔案指標在寫入完成後,是寫入前後移結構體位元組數,如果位元組數不是4的倍數,在多數情況下會移動到4位元組倍數位置,多出來的位元組被跳過。

12樓:網友

跟讀寫字串是一樣的,都是按位元組移動。

fread讀取bmp檔案時,讀取一定資料後,指標就不移動了,是怎麼回事?

13樓:

不知你檢查fpin有什麼用!**不全,所以說不準。從**看,fpin應該是讀開啟的檔案指標。

如果是,那麼不是「讀取一定的資料後,fpin的值就不變化了」,而是它的值一直就不會變化,因為fpin並不指向檔案內容的位置,而是指向一個開啟了的檔案的「資訊結構體」,真正移動的指標是這個結構體中的內部成員,對程式設計師是透明的。但檔案操作函式都以這個指向結構體的指標為操作物件,使人誤以為它是移動的,其實並非如此……

c 中關於getline函式讀取資料的問題

getline的原型如下 getline char c,int i,char c 表示讀入i個字元,或者遇到結束符c為止的字元數,儲存到c中。getline char int 表示讀入i個字元到c中。注意讀入的字元數應比實際的大1,因為讀入的是字串,字串將會以 0 作為結束,如果你要讀入3個字元,那...

指標指向不同型別資料時,指標變數佔用多大空間

在c中,指標只有3種 指向簡單變數的,指向結構體變數的,指向函式的.他們的大小和指向的型別無關,基本都是一樣的,等於地址寬度.在16位的地址的系統裡,用 段 偏移 來表示一個地址,當只用偏移的時候 段內 稱為near指標,當段偏移都用的時候 跨段 稱為far指標,far指標佔用空間大於near指標....

c如何讀取SQL中的資料,C 中怎麼讀取SQL資料庫表中的資料後顯示在一個TEXTBOX中

string strconn data source 資料庫伺服器名稱或ip initial catalog 資料庫名稱 persist security info true user id sa password password sqlconnection conn new sqlconnect...