这个"#"在这里做了什么

hac*_*cks 1 c format-specifiers

我想出了一个代码

#include <stdio.h>

int main()
{ 
   int i = 1427;
   double d = 1427.0;

   printf("%#o\n", i);
   printf("%#X\n", i);
   printf("\n%g\n", d);
   printf("%#g\n", d);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

02623
0X593

1427
1427.00
Run Code Online (Sandbox Code Playgroud)

首先我认为#用于0输出的前缀,但我错了,因为它在最后一个输出中的奇怪行为,它在十进制后打印零.
有人可以解释这#是什么以及它在这里做了什么?

Cod*_*ray 8

#标志具有不同的行为,具体取决于上下文.

如果它与使用o,xX说明符,该值前面有0,0x0X分别.

如果是用与a/ A,e/ E,f/ F,或者G,该值始终与一个小数点结束.

这种行为在Web上的多个位置都有很好的记录.搜索"printf"和可能的"格式说明符"通常会产生很多好的链接.以下是一些可以满足您的胃口: