【问题标题】:printf width modifier for special characters [duplicate]特殊字符的printf宽度修饰符[重复]
【发布时间】: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 位字节来表示。

标签: c printf width modifier


【解决方案1】:

您展示的“特殊”字符需要更多字节(char)才能在字符串中表示。您对3 的任意限制是不够的,请将其提高到某个合适的值。

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

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 2018-12-25
    • 2015-06-26
    • 1970-01-01
    • 2011-09-19
    • 2018-11-12
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多