指定文字輸出字串的長度
若干字型和文字輸出函式都有一個參數,指定文字輸出字串的長度。 典型的範例是 DrawTextEx的 cchText 參數。
每個函式都有 「ANSI」 版本和 Unicode 版本(例如,分別 DrawTextExA 和 DrawTextExW)。 針對每個函式的 「ANSI」 版本,長度會指定為 BYTE 計數,而 Unicode 函式則指定為 WORD 計數。
將這視為「字元計數」是傳統的。 這通常適用於許多語言,包括英文,但一般並不精確。 在 「ANSI」 字串中,SBCS 中的字元 代碼頁各取一個字節,但 DBCS 中大部分字元 代碼頁需要兩個字節。 同樣地,大部分目前定義的 Unicode 字元都位於基本多語平面(BMP),並且其 UTF-16 表示法適用於一個 WORD。然而,補充字元在 Unicode 中則以「代理對」表示,這需要兩個 WORD。
每個函式都會採用長度計數。 針對每個函式的 「ANSI」 版本,長度會指定為字串的 BYTE 計數長度,不包括 NULL 終止符。 針對 Unicode 函式,長度計數是以 sizeof(WCHAR) 除以 2 的位元組計數,不包括 NULL 終止符。 字元計數是字元數的計數,可能不等於字串的長度計數。 在某些情況下,字元在 ANSI 中可能會需要多個 BYTE(例如,DBCS 字元),而在 Unicode 中可能需要多個 WORD(例如,代理字元)。 此外,字元數目可能不等於字元數,因為多個字元可能會複合成一個字元。 長度計數是數據量。 字元計數是當做一個實體處理的單位數目。 字形是被渲染的。 例如,在 Unicode 中,您可以有長度為 3 的字串,也就是 2 個字元,且會產生 1 個字元的轉譯。 不過,一般而言,大部分的 Unicode 字串長度、字元計數和轉譯字元數目都相等。
您可以使用 _tcslen() 來取得字串長度。 針對 ANSI,_tcslen() 會傳回位元元組數。 若為 Unicode,_tcslen() 會傳回 WCHAR 數目(也就是 WORDs)。
不一定會顯示的製表符和軟連字符等特殊處理字符可能會影響顯示的輸出。 它們會包含在字串長度和字元計數中,但可能不會由轉譯的字元直接表示。
其中一些函式可讓呼叫端將長度指定為 -1,以指出字串為 null 終止;在此情況下,函式會自動計算字元計數。 並非所有函式都提供這項功能。 這是以逐個函式為基礎指定;請參閱個別函式文件。