任何人都可以解释输出 printf("%0 %x",a); 吗?

S.B*_*S.B 5 c

这段代码让我很困惑。我无法理解%0里面在做什么printf

代码:

#include <stdio.h>

int main() {
    int a = 100;
    printf("%0 %x", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出

%x
Run Code Online (Sandbox Code Playgroud)

chq*_*lie 9

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

  • 0是一个标志,指定数字表示应该用初始零填充到指定的宽度(此处未指定)

  • the 是一个标志,指定带符号的转换应该在与 a 相同的位置加上一个空格作为-负数的前缀。

  • 第二%是在转换说明,因此初始部分仅仅是一个变型%%与2米额外的标志,因此应使%字符被输出,但C标准规定在7.21.6.20的fprintf功能

    %:%写了一个字符。不转换任何参数。完整的转换规范应为%%

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

大多数库只会输出%x,即:%for%0 %xfor the trailing x,忽略a参数,这就是你在系统上得到的,但行为实际上是未定义的,所以什么都不能假设。

相反,printf("|%0 5d|", 100);将输出,| 0100|但对于x无符号的转换忽略空格,因此printf("|%0 5x|", 100);将输出|00064|.