1樓:荔菲欣懌
為什麼非得從後面往前讀呢?不過話說回來,就算如此,你要能夠顯示中文的話弄個陣列,用fgets讀取就是了啊,不知道你有什麼問題
2樓:空空
這個程式是想幹什麼的??
c語言fseek問題
3樓:滄海雄風
int fseek( file *stream, long offset, int origin );
第乙個引數stream為檔案指標
第二個引數offset為偏移量,正數表示正向偏移,負數表示負向偏移
第三個引數origin設定從檔案的**開始偏移,可能取值為:seek_cur、 seek_end 或 seek_set
seek_set: 檔案開頭
seek_cur: 當前位置
seek_end: 檔案結尾
其中seek_set,seek_cur和seek_end依次為0,1和2.
簡言之:
fseek(fp,100l,0);把檔案內部指標移動到離檔案開頭100位元組處;
fseek(fp,100l,1);把檔案內部指標移動到離檔案當前位置100位元組處;
fseek(fp,-100l,2);把檔案內部指標退回到離檔案結尾100位元組處。
4樓:匿名使用者
我前幾天也碰到fseek問題,體會頗深。
幾點建議:
1、你開啟的方式是什麼?比如r還是rb?這兩者差別特別大。
2、暫且不論r或rb,你這個檔案從開頭到10的位置是什麼字元,空格?空行?ascii字元?
或者其他?建議找個可以檢視16進製制的軟體開啟看看,比如ultraedit。然後再覺得偏移量是多少。
3、由於檔案需要開啟才能操作,檢查一下路徑和函式使用問題。如果是當前目錄,那直接fp=fopen("我的bin","rb")或者 fp=fopen("我的bin","r"),再fseek(fp,10,0)。如果不是當前目錄,記得目錄符號"\"在c語言裡頭需要使用轉義字元才能實現,也就是"\\"才能實現"\",比如fp=fopen("c:
\\我的bin","rb")。
基本上以上三點可以解決fseek讀不出內容的問題。
5樓:匿名使用者
是不是路徑帶中文的原因?
c語言fseek函式問題
6樓:苦力爬
64k=2^16=65536
二進位制16位能表示的最大數是65536
如果用16位的二進位制數字來表示檔案的大小,那麼大於65536位元組的檔案就無法表示,會統一表示為資料溢位。
所以要用擁有更多位數的long型資料來表示檔案的長度。
c語言中,fseek函式怎麼控制移動的方向?怎麼往前或往後,最好能有個例子。 謝謝!
7樓:匿名使用者
fseek有三個引數,第1個是檔案控制代碼,通過開啟檔案時得到;第2個就是移動的位元組數,這個數可以是正的,就是向後(檔案尾部)移動,也可以是負的,即向前(檔案頭部)移動;第3個引數指明從**移動,如果寫seek_set就是從檔案頭部移動多少位元組,如果寫seek_end則是從尾部開始移動,seek_cur則是從當前位置移動。
比如要將檔案指標移動到檔案開始的第24位元組位置:fseek(fp,24,seek_set);
移動到檔案尾部向前50位元組:fseek(fp,-50,seek_set);
在當前位置移動8個位元組(跳過8個位元組資料):fseek(fp,8,seek_cur);
在當前位置向前移動16個位元組(準備重新讀取資料):fseek(fp,-16,seek_cur);
在c語言中fseek()的功能 5
8樓:匿名使用者
fseek()是重定位流(資料流/檔案)上的檔案內部位置指標。
注意:檔案指標指向檔案/流。位置指標指向檔案內部的位元組位置,隨著檔案的讀取會移動,檔案指標如果不重新賦值將不會改變或指向別的檔案。
如果執行成功,stream將指向以fromwhere為基準,偏移offset(指標偏移量)個位元組的位置,函式返回0。如果執行失敗(比如offset取值大於等於2*1024*1024*1024,即long的正數範圍2g),則不改變stream指向的位置,函式返回乙個非0值。
9樓:
當開啟乙個檔案流後,fseek用來在流中定位,即操作檔案指標,這樣可以達到隨機訪問檔案的目的,具體的可以參考很多c語言的教材,動手寫程式才是關鍵。
c語言大檔案操作疑問(fseek)
10樓:匿名使用者
c語言fseek()函式:移動檔案流的讀寫位置
相關函式:rewind, ftell, fgetpos, fsetpos, lseek
標頭檔案:#include
定義函式:int fseek(file * stream, long offset, int whence);
函式說明:
fseek()用來移動檔案流的讀寫位置.
1、引數stream 為已開啟的檔案指標,
2、引數offset 為根據引數whence 來移動讀寫位置的位移數。引數 whence 為下列其中一種:
seek_set 從距檔案開頭offset 位移量為新的讀寫位置. seek_cur 以目前的讀寫位置往後增加offset 個位移量。
seek_end 將讀寫位置指向檔案尾後再增加offset 個位移量. 當whence 值為seek_cur 或seek_end 時, 引數offset 允許負值的出現.
下列是較特別的使用方式:
1) 欲將讀寫位置移動到檔案開頭時:fseek(file *stream, 0, seek_set);
2) 欲將讀寫位置移動到檔案尾時:fseek(file *stream, 0, 0seek_end);
返回值:當呼叫成功時則返回0, 若有錯誤則返回-1, errno 會存放錯誤**.
附加說明:fseek()不像lseek()會返回讀寫位置, 因此必須使用ftell()來取得目前讀寫的位置.
11樓:
是有這個限制的。
如果使用的標準的c函式的。
如果是你是32作業系統,c語言操作檔案的大小是 2^31 ,2g
如果是你是64作業系統,c語言操作檔案的大小是.2^63 ,8589934592 g
。 你說的問題肯定,出在32位作業系統上。
一是:作業系統能不能允許建立2g以上的檔案了,具體要看作業系統了。
如果不允許,你的問題就沒什麼意義了!
如果作業系統允許的話,都會提供,系統函式讓你呼叫的。
你得自己去找資料了。
***************
你可以看一下,sqlite的源**,我的3-5-4版本
他不用是用c語言標準庫的。函式,能windows提供的系統函式setfilepointer,readfile
static int winread(
sqlite3_file *id, /* file to read from */
void *pbuf, /* write content into this buffer */
int amt, /* number of bytes to read */
sqlite3_int64 offset /* begin reading at this offset */
)if( !readfile(pfile->h, pbuf, amt, &got, 0) )
if( got==(dword)amt )else}
12樓:慄姝豔之利
嚴格意義來說,fseek是操作二進位制檔案的。
如果你是想從檔案檔案讀取一行,建議及用fgets函式。
讀取到陣列,再提取資料a、b、c,然後扔掉d
13樓:匿名使用者
用迴圈,多執行幾次fseek函式
C語言裡fscanf是如何處理c與s的
fscanf和scanf一樣,只是前者一般從檔案中讀資料,後者從輸入緩衝區讀資料。在scanf中,c只讀取乙個字元,s是讀取乙個字串 這時會跳過前面的 t n 等廣義空格直接接收字元,乙個接乙個地把接收到的字元依次賦給對應的陣列元素,當再次遇到 t n 等廣義空格時認為字元接收完畢,就在剛被賦值的元...
如何處理素描中的虛實關係
總體來說,一幅繪畫作品中的景物空間關係是 近實遠虛 前實後虛 所謂 實 是相對於所處空間位置中其他景物而言,實 是指明暗 黑白灰 對比關係色彩冷暖對比關係相對於遠處的景物對比關係強烈突顯而 實 所謂遠景的 虛 是相對於近前的景物對比關係的 實 而言的,一般來說,所謂的 近 是指畫面二維空間裡面所有景...
c語言的問題以下函式中getchar有什麼作
的編寫者本bai 打算讓第du乙個getchar 起暫停的作用zhi,即輸出dao can not open npress any key to continue n 這句話之後專,等待使用者按 屬任意鍵,讀取這個鍵的字元,然後退出。但它不會起作用,因為它讀入了輸入的檔名後的回車符 即它已經讀入了乙...