printf ("%#p [ buf ] (%.2d) : %s \n", buf, strlen (buf), buf);
我之前从未见过%#p (%.2d)
,它是如何运作的?
答案 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)
不确定这是否有效使用'#'标志:
很可能会打印一个交替格式化的指针形式,将0x附加到地址。
答案 4 :(得分:0)
在您的情况下(p
转换),根据手册页未定义结果。无论如何,%p
和%#p
在我的机器上打印相同的值(看起来像0x7FFFF000)