【问题标题】:What's the difference between %c and %C in printf?printf 中的 %c 和 %C 有什么区别?
【发布时间】:2009-08-02 07:56:06
【问题描述】:

我只能找到小 c 的参考资料。我假设大写的 C 用于 Unicode,但我不确定。对于较小的数字,两者都输出相同的字符。

【问题讨论】:

    标签: c printf visual-c++


    【解决方案1】:

    来自 MSDN:

    %c

    type: int or wint_t 
    

    当与 printf 函数一起使用时, 指定单字节字符; 当与 wprintf 函数一起使用时, 指定一个宽字符。

    %C

    type: int or wint_t
    

    与 printf 一起使用时 函数,指定一个宽字符; 当与 wprintf 函数一起使用时, 指定单字节字符。

    更多关于格式说明符here

    【讨论】:

      【解决方案2】:

      来自MSDN

      %c

      当与 printf 函数一起使用时,指定一个单字节字符;与 wprintf 函数一起使用时,指定一个宽字符。

      %C

      当与 printf 函数一起使用时,指定一个宽字符;当与 wprintf 函数一起使用时,指定一个单字节字符。

      【讨论】:

        【解决方案3】:

        请注意,%C 不是标准的。字符的标准转换是:

        • %c 用于intprintfunsigned char 一样输出它。 wprintf 通过btowc 将转换结果输出为wchar_t
        • %lc 用于wint_tprintfwcrtomb转换成多字节字符串的结果输出。 wprintf 将其输出为wchar_t

        【讨论】:

        • 这也意味着 wprintf 函数中 %c 的 Microsoft 行为也是不合规的。来自 MSDN:“类型 C、n、p 和 S,以及 c 和 s 与 printf 函数的行为,是 Microsoft 扩展,与 ANSI 不兼容。”
        • 该标准定义了 n 和 p 的行为,这似乎与上面 MSDN 链接中描述的行为相匹配(顺便说一句,它没有提到 n 和 p 作为扩展名)。而且我认为使用 printf 而不是 wprintf 是一个错字。查看该页面,我看到了另一个 Microsoft 扩展:将 h 作为修饰符与 c 和 s 一起使用,这使它们恢复了标准行为。
        猜你喜欢
        • 2011-01-28
        • 2017-04-18
        • 2011-04-05
        • 1970-01-01
        • 2010-09-09
        • 1970-01-01
        • 2011-10-18
        • 2014-03-01
        • 2016-06-22
        相关资源
        最近更新 更多