小心fseek函式的返回值

2021-06-13 04:44:22 字數 682 閱讀 1336

有時候我們正常寫程式時**沒有問題的情況下,認為fseek的返回值不是0就是其他,即認為一旦seek出界檔案都返回菲0值。其實以前我也沒太在意,沒有極端測試,這次公司實習解ts流時為了保證**的健壯性,和同事討論發現fseek函式遠遠不是我想像中那樣返回。
moves the file pointer to a specified location.
int fseek( file *stream, long offset, int origin );
int _fseeki64( file *stream, __int64 offset, int origin );
對應檔案的指標偏移,在函式定義中並沒有真正的說明清楚返回值,對於offset當為正數的時候是向檔案尾偏移的,當為負數的時候是向檔案頭方向偏移的,這裡主要是要注意偏移的大小和檔案大小邊界的關係。 

當offset是向檔案尾方向偏移的時候,無論偏移量是否超出檔案尾,fseek都是返回0,當偏移量沒有超出檔案尾的時候,檔案指標式指向正常的偏移位址的,當偏移量超出檔案尾的時候,檔案指標是指向檔案尾的。並不會返回偏移出錯-1值。

當offset是向檔案頭方向偏移的時候,如果offset沒有超出檔案頭,是正常偏移,檔案指標指向正確的偏移位址,fseek返回值為0.當offset超出檔案頭時,fseek返回出錯-1值,檔案指標不變還是處於原來的位址。

主函式的返回值返回給誰 主函式返回值

responsebody報406 原因是 要返回的物件沒有setget方法sdfsdf 自定義視 析器和缺省視 析器需同時使用才好用 如果以redireci或forward字首,那麼 走缺省視 析器 return redirect index.jsp return forward index 需寫全...

函式返回值

這裡接著探求被調函式的返回值是如何傳遞到主調函式中的,下面為c程式。add函式通過直接返回a b的,而add1函式先定義乙個區域性變數c,儲存a b的值,然後再返回c的值。其中a b可以當成乙個臨時變數,其結果是暫時存放在暫存器中的 eax 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...

函式返回值

一般說來,函式中是可以進行區域性變數的返回的,不然豈不是全部要用全域性變數,如果使用了全域性變數,那還有必要進行返回嗎?那函式就沒有它存在的意義了!但是要注意了,這裡所謂的區域性變數的返回很有內涵,什麼樣的值才可以進行返回而不出錯?其實,只要遵守一句話即可 函式不能返回指向棧記憶體的指標!為什麼?因...