【发布时间】:2018-03-12 15:44:58
【问题描述】:
我在 C 中使用 printf 宽度修饰符有问题
示例:
char a[] = "o", b[] = "l";
printf("%-3s %s", a, b);
控制台输出在字符串之间给了我 3 个空格,但是当我将“o”更改为“ó”时,控制台显示之间有 2 个空格。每次我在字符串中使用“ł”、“ó”、“ś”等字符时,宽度修饰符都会缩短 1 个符号,为什么会发生这种情况?
OS X 10.11(El Captain)
【问题讨论】:
-
您可能对
printf("%zu\n", strlen(a));感兴趣 -
Mac OSX 使用 UTF-8 编码,因此每个代码点使用可变数量的 字节 -
char这个词具有误导性,意味着一个字节和一个字符基本执行字符集;然而,并不是所有的扩展字符都可以用一个 8 位字节来表示。