看書本是說兩個函數都需要四個參數,但是使用上面還是不太了解
可以請教一下各位高手嗎?
對了~還有fseek()裡面的有一個參數,是關於偏移量的參數,請教一下
這個參數大致上該怎麼給呢~~
我不是寫作業的~~XD,只是有一堆疑問,想好久都想不出來~~
想請教各位高手,希望給小弟一點指教~~
問題如果問的不好請多多指教包涵~~~XD
2006-08-02 20:08:19 · 5 個解答 · 發問者 koko 1 in 電腦與網際網路 ➔ 程式設計
先感謝Danny的回答
那fwirte()用法和read()也是一樣了?
-------------------------------------------------
fseek()裡的offset是以file pointer指向的data type為一個位元組嗎?
如int 的話一個位元組就是4byte之類的?_?
2006-08-03 03:14:26 · update #1
感謝三位高手的教導,小弟感激不盡吆~~
用法方面說的蠻清楚了~~感謝~~^^
2006-08-03 17:31:09 · update #2
語法:int fread( void *buffer, size_t size, size_t count, FILE *stream );
舉例:
FILE *fin;
char buff[100];
fread(buff, sizeof(buff), 1, fin);
意思就是說設定讀到 buff 陣列裡面, 並設定最多讀 sizeof(buff) = 100 個字元進來,
後面的 1 指每次讀一個為元組進來, 從 fin 檔案指標...
語法:int fseek(FILE *stream, long offset, int whence);
:: 而參數 whence 值如下
-------------------------------------------------------------------------
SEEK_SET0File beginning (檔案開頭)
SEEK_CUR1Current file pointer position (目前檔案指標所在的位置)
SEEK_END2End-of-file (檔案結尾)
用法:
FILE *fin;
fseek(fin, 5, SEEK_SET); // 檔案指標指向檔案開頭第 5 個 bytes
fseek(fin, -3, SEEK_END); // 檔案指標指向檔案結尾倒數第 3 個 bytes
中間那個數字參數視自己需要, 還是需要自己數的...="=
參考看看囉, 我很少用到這兩個函式,
fread() 比較常用在讀取 ASCII 檔案...
2006-08-03 00:54:55 補充:
fread() 也常看到人家用在 ACM 題目上, 為了拼速度...
2006-08-03 11:50:45 補充:
這打錯了 "ASCII 檔案", 應改為 Binary File, 不好意思...
2006-08-03 12:18:59 補充:
補充 fseek 的範例, 這樣也許會比較容易理解..@@測試的文字檔(input.txt) :http://0rz.net/611Gg程式碼:http://0rz.net/ef1HV我用 fseek 完之後都會先用 printf(),來看看目前指標指到哪個位置了,以確保資料的正確性...也感謝樓下兩位的指正 ^_^
2006-08-02 20:51:20 · answer #1 · answered by 榮章 4 · 0⤊ 0⤋
>這家不錯lv333。cC買幾次啦真的一樣
勋会兮匾
2014-06-05 08:58:43 · answer #2 · answered by rvtxbp 1 · 0⤊ 0⤋
>這家不錯*****買幾次啦真的一樣
呶伕劽
2014-05-21 11:34:30 · answer #3 · answered by Anonymous · 0⤊ 0⤋
只真對Danny 對fread 用法的修正
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
buffer : 讀取資料的存放位置開始address
size : 每次讀取的byte 數
count : 讀取幾次. 每次讀size byte .所以一共會讀取size*count byte 的資料到buffer 中.(count 並飛Danny 說的每次讀取幾byte)
stream: 讀取的檔案指標
fread return 的值表示讀取了幾次資料.
example
假設相關的動做都以設定好了(如開檔都開好了)
struct A
{
char Name[10];
int SC;
};
FILE *input=fopen("www.dat","rb");
struct A aa[100];
fread(&aa,sizeof(A),100,input);
// 這表示從input file stream 讀取資料放到aa 當中, 讀取100 筆.
因aa 的大小是sizeof(A) 所以fread 的第二參數設成sizeof(A)
又要讀取100 筆, 所以第三參數設成100
請參考
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_fread.asp
2006-08-03 07:43:50 · answer #4 · answered by SiYu 5 · 0⤊ 0⤋
Denny兄的回答,我有一些補充:
fread/fwrite/fseek 多用在binary 檔案型態,所以它才要您提供精確的讀入/寫出byte數
e.g. 您有一個 structure js陣列 jsa 有3個成員要寫出至檔案
struct js { .......
} jsa[3];
FILE *fp;
....
fp = fopen( FileWithPathName, "r+b" );
....
fseek( fp, 100L, SEEK_SET ); // move to where to write
fwrite( jsa, sizeof( struct js), 3, fp );
就會從 jsa 這個地方取 3Xsizeof(struct js)個byte的資料寫入檔案 fp 中從頭算來第101 bytes的地方(0,1,2,...,100)
如果一個struct js變數佔用100個bytes,那總共就會寫入300 bytes 資料
關於偏移量,如果檔案內容是您一手建立的binary資料,當然您才能確定到那裡取得特定資料。
附帶提一下,偏移量和fread/fwrite最好只用在 binary 檔,因為如果是使用在文字檔模式下,由於文字檔的換行可能是一個byte,也可能是兩個byte,偏移量和fread/fwrite可能會出現誤差,雖然可以執行,但結果可能不會跟您預期的一樣
如果是文字檔建議使用 fgets/fprintf 比較好
2006-08-03 07:35:58 · answer #5 · answered by 暗黑歐吉尚 3 · 0⤊ 0⤋