2017-10-01 52 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是不够的,提高到一些合适的价值。

此外,这些特殊字符表示的方式和长度取决于系统。对于可移植的代码,你不应该做出这种任意的假设。