指定文字輸出字串的長度

數個字型和文字輸出函式都有參數,可指定文字輸出字串的長度。 典型的範例是DrawTextExcchText參數。

這些函式都有 「ANSI」 版本和 Unicode 版本 (,例如 DrawTextExADrawTextExW分別) 。 針對每個函式的 「ANSI」 版本,長度會指定為 BYTE 計數,而 Unicode 函式則指定為 WORD 計數。

將這視為「字元計數」是傳統的。 這通常適用于許多語言,包括英文,但一般並不精確。 在 「ANSI」 字串中, SBCS 字碼頁中的字元會分別接受一個位元組,但 DBCS 字碼頁中的大部分字元會採用兩個位元組。 同樣地,大部分目前定義的 Unicode 字元都位於基本多語系平面 (BMP) 及其 UTF-16 標記法符合一個 WORD,但補充字元是由 ''surrogates'' 以 Unicode 表示,這需要兩個 WORD。

每個函式都會採用長度計數。 針對每個函式的 「ANSI」 版本,長度會指定為字串的 BYTE 計數長度,不包含 Null 結束字元。 針對 Unicode 函式,長度計數是位元組計數除以 sizeof (WCHAR) ,也就是 2,不包括 Null 結束字元。 字元計數是字元數的計數,可能不等於字串的長度計數。 在某些情況下,字元會針對 ANSI (採用一個以上的 BYTE,例如 DBCS 字元) ,以及一個以上的 WORD 用於 Unicode (,例如 Surrogate 字元) 。 此外,字元數目可能不等於字元數目,因為多個字元可能會複合成一個字元。 長度計數是資料量。 字元計數是當做一個實體處理的單位數目。 圖像是轉譯的內容。 例如,在 Unicode 中,您可以有長度為 3 的字串,也就是 2 個字元,導致轉譯 1 個字元。 不過,通常大部分的 Unicode 字串長度、字元計數和轉譯圖像的數目都相等。

您可以使用 _tcslen () 來取得字串長度。 針對 ANSI,_tcslen () 會傳回位元組數目。 針對 Unicode,_tcslen () 會傳回 WORD (即 WORDs) 的數目。

不一定繪製的定位字元和軟連字號等特殊處理字元可能會影響繪製的輸出。 它們包含在字串長度和字元計數中,但可能不會由轉譯的字元直接表示。

其中一些函式可讓呼叫端將長度指定為 -1,以表示字串為 Null 終止;在此情況下,函式會自動計算字元計數。 並非所有函式都提供這項功能。 以函式為基礎指定;請參閱個別函式檔。