谁能解释输出 printf ("%0 %x",a);?

标签 c

这段代码让我很困惑。我不明白什么%0在里面做printf !
代码:

#include <stdio.h>

int main() {
    int a = 100;
    printf("%0 %x", a);
    return 0;
}
输出
%x

最佳答案

%0 %x有一个无效的 printf转换规范:

  • 0是一个标志,指定数字表示应该用初始零填充到指定的宽度(此处未指定)
  • 是一个标志,指定如果在与 - 相同的位置是正数,则带符号的转换应以空格为前缀。对于负数。
  • 第二个 %是转换说明符,所以初始部分只是 %% 的变体有 2 个额外的标志,因此应该导致 %要输出的字符,但 C 标准在 中指定7.21.6.20 fprintf功能

    %: A % character is written. No argument is converted. The complete conversion specification shall be %%.


    因此 %0 %是无效的转换规范,如 %不接受标志。

  • 大多数库只会输出 %x , 即: %%0 %x用于尾随 x ,忽略 a参数,这就是你在系统上得到的,但行为实际上是未定义的,所以没有什么可以假设的。
    相反,printf("|%0 5d|", 100);将输出 | 0100|x 的空格被忽略无符号转换,所以 printf("|%0 5x|", 100);将输出 |00064| .

    关于谁能解释输出 printf ("%0 %x",a);?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68926885/

    相关文章:

    GCC 可以警告我修改 C99 中 const 结构的字段吗?

    从 INTEGER 到 int 的代码生成

    使用数组创建堆栈

    c - 存储一个 Lua 函数?

    c - sizeof (""+0) != sizeof(char *) 错误或未定义的行为?

    java - 使用 C/C++ 进行 Android 开发是否比 Java 更快?

    c# - 如何使用 C# 或 C/C++ 在 Windows 7 中获取智能卡读卡器名称?

    c - 字符串解析,纯C

    c - 没有连接请求时accept()返回SOCKET_ERROR

    c - 我如何让我的c程序随机选择