C語言fseek函式如何處理中文

2022-02-24 16:55:13 字數 4078 閱讀 8355

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 這句話之後專,等待使用者按 屬任意鍵,讀取這個鍵的字元,然後退出。但它不會起作用,因為它讀入了輸入的檔名後的回車符 即它已經讀入了乙...