2017-10-01 49 views
4

我有與C的printf寬度調節問題printf的寬度修改爲特殊字符

例如:

char a[] = "o", b[] = "l"; 

printf("%-3s %s", a, b); 

控制檯輸出給我串3米之間的空間,但是當我改變「O」到「 ó「,控制檯之間顯示2個空格。每次我在字符串中使用像「ł」,「ó」,「ś」這樣的字符時,寬度修飾符會縮短1個符號,爲什麼會發生這種情況?

OS X 10.11(厄爾尼諾上尉)

+1

您可能會感興趣'printf(「%zu \ n」,strlen(a));' –

+0

Mac OSX使用UTF-8編碼,因此每個代碼點使用可變數量的* bytes * - 單詞' char'是誤導性的,意味着*基本執行字符集*的字節和字符;然而,不是所有的擴展字符都可以用一個8位字節表示。 –

回答

3

「特」字,你都顯示他們需要更多的字節(char)在一個字符串來表示。你的任意限制3是不夠的,提高到一些合適的價值。

此外,這些特殊字符表示的方式和長度取決於系統。對於可移植的代碼,你不應該做出這種任意的假設。