这段代码让我很困惑。我不明白什么%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/