字串函式差異
本主題描述處理 Unicode 和字元集資訊時所使用的字串函式之間的差異。 這些函式同時具有 Unicode 和 Windows 字碼頁 實作,以支援 Unicode 和 Windows 字碼頁參數。
下列字串函式不需要特殊批註。 其 Unicode 和 Windows 字碼頁實作的運作方式相同。
- CharNext
- CharPrev
- StringCchCat、 StringCchCatEx
- StringCchCopy、 StringCchCopyEx
- StrCbLength、 StrCchLength
其中一個字串長度函式所擷取的長度值一律是以一般字元寬度為基礎:Windows 字碼頁為 8 位,Unicode 為 16 位。 這個值通常稱為「字元計數」。此字詞絕對正確,因為使用 雙位元組字元集 的 Windows 字碼頁 (DBCS) 有一些實際以兩個連續位元組表示的全形字元。 Unicode 中的 Surrogate 發生類似的情況。
下列字串函式會區分目前線程的地區設定,其衍生自使用者在主控台中選取的語言。 lstrcmp和lstrcmpi函式不會執行位元組比較,例如strcmp。 相反地,它們會根據地區設定的規則來比較字串。
下列函式會根據所使用的版本,在 OEM 字元集與目前的 Windows 字碼頁或 Unicode 之間轉換:
例如 ,StringCbPrintf的列印函式會藉由在其格式規格中提供下列新的和變更的資料類型來支援 Unicode。 這些格式規格會影響函式解譯對應輸入參數的方式。
格式規格 | Windows 字碼頁版本的資料類型 | Unicode 版本的資料類型 |
---|---|---|
c | CHAR | WCHAR |
C | WCHAR | CHAR |
hc、hC | CHAR | CHAR |
hs、hS | LPSTR | LPSTR |
lc、lC | WCHAR | WCHAR |
ls、lS | LPWSTR | LPWSTR |
s | LPSTR | LPWSTR |
S | LPWSTR | LPSTR |
輸出文字的資料類型一律取決於函式的版本。 當輸入參數的資料類型和輸出文字的資料類型不一致時,列印函式會視需要執行從 Unicode 轉換為目前 Windows 字碼頁的轉換,反之亦然。
針對列印函式的 Unicode 版本,格式字串為 Unicode,如同輸出文字。
警告
在涉及緩衝區溢位的許多安全性問題中,緩衝區處理不佳。 請參閱 Strsafe.h 參考。 Strsafe.h 中定義的函式會提供額外的處理,以在程式碼中正確處理緩衝區。 基於這個理由,它們旨在取代其內建 C/C++ 對應專案,以及特定的 Microsoft Windows 實作。 如需詳細資訊,請參閱 安全性考慮:國際功能。
相關主題