这种格式化器是什么意思?

时间:2011-04-13 08:14:29

标签: c printf

printf ("%#p [ buf  ] (%.2d) : %s \n", buf, strlen (buf), buf);

我之前从未见过%#p (%.2d),它是如何运作的?

5 个答案:

答案 0 :(得分:1)

来自http://www.cplusplus.com/reference/clibrary/cstdio/printf/

  

与o,x或X说明符一起使用时,对于不同于零的值,该值分别以0,0x或0X开头。

     

与e,E和f一起使用时,即使没有数字,也会强制写入的输出包含小数点。默认情况下,如果没有数字,则不写入小数点。

     

与g或G一起使用时,结果与e或E相同,但不会删除尾随零。

因此,在您的情况下似乎什么都不做,因为p用于打印指针地址。我想有些编译器可能会对此有不同的解释,但我找不到它。

答案 1 :(得分:1)

p指定打印地址(即指针)。 #标志指定“备用表单”,在这种情况下,可能会在输出前加0x

答案 2 :(得分:1)

它是格式标识符的标志。 它很可能在指向值之前打印出0x(但我没有检查过TBH)

找到了一个很好的解释here

答案 3 :(得分:0)

不确定这是否有效使用'#'标志:

  • 与o,x或X说明符一起使用 值前面有0,0x或0X 分别对于不同的值 比零。
  • 与e,E和f一起使用 强制写入输出包含 即使没有数字也是小数点 会跟随。默认情况下,如果没有 数字跟随,没有小数点 写入。
  • 与g或G结果使用 与e或E相同但是 不删除尾随零。

很可能会打印一个交替格式化的指针形式,将0x附加到地址。

答案 4 :(得分:0)

在您的情况下(p转换),根据手册页未定义结果。无论如何,%p%#p在我的机器上打印相同的值(看起来像0x7FFFF000)