| 函數 | 字符集 | 頭文件 | 備註 |
|---|---|---|---|
strlen | ANSI (char*) | <string.h> | 標準 C 庫,單字節字符 |
wcslen | Unicode (wchar_t*) | <wchar.h> | 寬字符版本 |
_tcslen | TCHAR (視編譯選項) | <tchar.h> | 宏映射:_UNICODE 定義時→wcslen,否則→strlen |
lstrlen | TCHAR (Windows API) | <windows.h> | 內核導出,行為同 _tcslen,但屬 API 層 |
_tcslen 是宏/內聯函數,編譯期根據 _UNICODE 宏展開為 strlen 或 wcslen;lstrlen 是 kernel32.dll 導出函數,運行時動態鏈接。_UNICODE 與 UNICODE 會被定義,_tcslen→wcslen,lstrlen→lstrlenW。_tcslen 通常內聯展開,無函數調用開銷;lstrlen 需跨模塊調用,微慢(可忽略)。_tcslen(或 CString::GetLength),配合 TCHAR 類型,確保單一代碼庫雙字符集編譯。std::string/std::wstring 及其 .size(),避免平台相關 API。strlenA/wcslen 顯式調用,避免宏映射造成困惑。在 Unicode 項目中對 char* 調用 _tcslen(實為 wcslen)會導致讀越界或結果錯誤;務必確保指釖類型與編譯選項匹配。