- 開始將文本字符串想象爲字符的數組,而不是 char 或字節的數組;
- 用通用數據類型(如 TCHAR/PTSTR )來表示文本字符和字符串;
- 用明確的數據類型(如 BYTE 和 PBYTE )來表示字節,字節指針和數據緩衝區;
- 用 TEXT 或 _T 宏來表示字面量字符和字符串,但爲了保持一致性和更好的可讀性,請避免兩者混用;
- 執行全局替換(例如用 PTSTR 替換 PSTR ) ;
- 修改與字符串有關的計算。例如,函數經常希望我們傳給它緩衝區打小的字符數,而不是字節數。這意味着我們應該傳入 _countoof(szBuffer), 而不是 sizeof(szBuffer) 。而且,如果需要爲一個字符串分配一個內存塊,而且知道字符串中的字符數,那麼要 記住內存是以字節來分配的 。
- 避免使用 printf 系列函數,正確的做法是使用 MultiByteToWideChar 和WideCharToMultiByte 函數。
- Unicode和_ Unicode符號要麼同時指定,要麼都不指定。
對於字符串處理函數,應該遵循以下基本準則:
- 始終使用安全的字符串處理函數,比如後綴爲 _s 的函數,或者前綴爲 StringCch 的函數。後者主要在我們想明確控制截斷的時候使用瞭如果不像明確控制截斷,首選前者。
- 利用 /GS 和 /RTCs 編譯器標誌來自動檢測緩衝區溢出。
- 不要使用 Kernel32 方法來進行字符串處理,比如 lstrcat 和 lstrcpy 。
- 在應用程序的代碼中,需要比較兩種字符串,應使用 CompareStringOrdinal(註冊表)CompareString(用戶字符串) 來進行比較。