使用fopen時應注意的問題
以前在windows下總喜歡使用CFile類來操作檔案,最近改用fopen系列函式,卻沒想到一個不經意的問題讓我除錯了一整天。開啟檔案使用的程式碼如下:
FILE* fh = fopen("c:/filename", "r");
預設情況下(當然可以進行設定),檔案是以文字模式開啟的,因為我們沒有使用b標記。這個時候,如果檔案資料中含有0x1a就有麻煩了。每當讀到0x1a的時候,檔案的位置會跳到4096(ftell返回的結果),如果檔案小於4096位元組的話,那麼呼叫fgetc得到的結果是EOF。另外,ftell返回的結果也和檔案的物理位置不一致,這使得我們在不自行跟蹤讀取進度的情況下,無法確定讀到什麼位置(呼叫ftell)以及還有多少位元組可讀(檔案長度-ftell(fh))。所以,呼叫fopen的時候還是加上b標記為好(二進位制模式)。文字模式的操作估計多用於stdin和stdout這兩個特殊的檔案控制代碼,因為這個時候0x1a相當於按鍵CTRL+Z。
相關推薦
使用fopen時應注意的問題
以前在windows下總喜歡使用CFile類來操作檔案,最近改用fopen系列函式,卻沒想到一個不經意的問題讓我除錯了一整天。開啟檔案使用的程式碼如下: FILE* fh = fopen("c:/filename", "r"); 預設情況下(當然可以進行設定),檔案是以文字模
mysql中的保留關鍵字,設計資料庫時應注意
設計資料庫時儘量不要用系統保留關鍵字,如果非要用,記得用``包裹,如:`desc` Mysq官方文件地址 http://dev.mysql.com/doc/refman/5.7/en/keywords.html MySQL 5.7 AC
Lombok用於繼承時應注意的點
lombok專案的產生就是為了省去我們手動建立getter和setter等基本方法的麻煩,它能夠在我們編譯原始碼的時候自動幫我們生成getter和setter等方法。即它最終能夠達到的效果是:在原始碼中沒有getter和setter方法,但是在編譯生成的位元組碼檔案中有getter和setter方法
mybatis的對映檔案當入參時Map時應注意,還有多個入參用@Param註解出現繫結失敗時
<select id="findPostsBetweenRange" parameterType="java.util.Map" resultMap="PostResultMap"> SELECT p.id as post_id,
使用if語句時應注意的問題(初學者)
(1)在三種形式的if語句中,在if關鍵字之後均為表示式。該表示式通常是邏輯表示式或關係表示式,但也可以是其他表示式,如賦值表示式等,甚至也可以是一個變數。 例:if(a=5)語句; if(b)語句; 只要表示式的值為非零,即為“真”。 比較:
時間型別資料使用between ...and ..語句條件查詢時應注意的問題
大多數專案中,我們使用的時間精度都是到多少號,在未經過處理時,儲存在資料庫後,時間精度就到毫秒了。比如輸入‘2013-12-30’,但儲存在資料庫中就變成‘2013-12-30 00:00:00.000’ 。平時使用 between ..and..語句時,對於數值型別的資料
for迴圈陣列時使用splice時應注意的問題
const list = [ {"className": "花花5555", "gradeName": "畢業班"}, {"className": "中ei班", "gradeName": "畢業班"}, {"className": "花花
SDL渲染QT介面時應注意的事
這段時間一直在研究用QT做個播放器的事情,發現如下幾個問題,特來記錄與分享 1.QWidget在設定全屏與還原時,他的視窗控制代碼是會變的!在設定全屏以及還原之後qDebug <<(HWND)Widget->winId();就可以看見。這個問題
php5.0到5.6的新特性,開發時應注意版本的相容性
php5.0 使用了Zend 2 引擎。 增加完善的面向物件模型 增加了新關鍵字,包括this,try,catch,public,private,protected等 改變strrpos() 和 strripos()使用整個字串作為 needle。 改變array_mer
寫less程式碼減運算時應注意減號和變數之間必須有空格
寫less程式碼時發現了一個bug,就是寫less程式碼減運算時應注意減號和變數之間加入沒有空格時減號會被解析為變數的一部分。 例1: .adapterFuc(@index) when
用javascript控制css中style.height和style.width時應注意px單位問題
divSlider.style.height = 1000; //在chrome不管用 divSlider.style.height = "500px"; //這樣就好了 1、document.getElementById('div').style.height=
JAVA學習中的一點小發現:LinkedList中.poll()方法在輸出時使用應注意的小點
在學習JAVA類集一章中關於LinkedList子類中.poll()方法易錯點的分析心得 例如如下程式碼: package Test; import java.util.LinkedList; public class LinkedListDemo01 { public
vb.net呼叫vc動態庫時傳遞陣列引數應注意的問題
vb.net呼叫vc寫的dll的時候,需要從vb.net傳遞陣列到dll函式,在vc dll中首先malloc了空間,然後將陣列引數指標指向了分配的地址,然後完成了演算法,最後free,結果編譯連結都
在使用執行緒池時應特別注意對ThreadLocal的使用
ThreadLocal可以為當前執行緒儲存區域性變數,而InheritableThreadLocal則可以在建立子執行緒的時候將父執行緒的區域性變數傳遞到子執行緒中。 如果使用了執行緒池(如Executor),那麼即使即使父執行緒已經結束,子執行緒依然存在並被池化。這樣,執
資產模型數據初始化時應註意的事項
date 行數 span badi 激活 資產 html 行數據 .com 資產模型建立之後,在數據初始化上有個比較特殊的地方,需要激活一個BADI,然後按順序初始化數據。 1. 要AA11和AA12保證抽數時的增量提取間隔和總賬行一致。 2. 數據
在使用線程池時應特別註意對ThreadLocal的使用
log 並且 重新 mac hive ava arch huang 線程池 使用ThreadLocal並且有線程池時要特別註意,ThreadLocal是以線程為key的,而線程池裏面的線程是會被重新利用的,所以如果有使用線程池並且使用ThreadLocal來保存狀態信息時要
同步時序設計時應值得註意的事項
ima 電路 關註 inf 設計 str jpg 綜合 網線 同步時序設計時一下事項應值得註意: 異步時鐘域的數據轉換。 組合邏輯電路的設計方法。 同步時序電路的時鐘設計。 同步時序電路的延遲。同步時序電路的延遲最常用的設計方法是用分頻或者倍頻的時鐘或者同步計數器完成所
當mysq啟動時出現錯誤1067時應如何解決
解決 如何 網上 控制面板 gedit 啟動 bsp mys 就是 在網上也看了很多教程,也查了很多方法,但是試過都沒有要用,最後經過本人親測 最好的方法,也是最簡單的方法,就是刪掉重裝。 第一 進入控制面板卸載程序,這樣是卸載不幹凈的。 第二進入註冊表windos+r
詳解關於Vue2.0路由開啟keep-alive時需要注意的地方
Vue2.0 做應用必有的需求就是頁面資料需要做快取,不用每次進入頁面都要把資料重新請求一遍,每次頁面切換都有段等待資料相應時間,這個使用者體驗可想有多麼蛋疼,所以頁面快取是必要的,啥時候需要更新頁面資料呢?可以監聽狀態變化,或者是手動下拉重新整理重新請求資料,醬紫,我想使用者體驗會做的更好。 keep-a
Python MD5加密詳解以及多次加密時的注意事項
在python中使用hashlib這個庫來進行MD5加密: import hashlib 在使用MD5加密時要注意加密內容的編碼格式: import hashlib //匯入hash庫 md5_object = hashlib.md5() //