问题描述
|
printf (\"%#p [ buf ] (%.2d) : %s \\n\",buf,strlen (buf),buf);
我以前从未见过%#p (%.2d)
,它是如何工作的?
解决方法
从http://www.cplusplus.com/reference/clibrary/cstdio/printf/:
与o,x或X指定符一起使用时,对于不等于零的值,该值分别以0、0x或0X开头。
与e,E和f一起使用时,即使后面没有数字,它也会强制写入的输出包含小数点。默认情况下,如果没有数字跟随,则不写小数点。
与g或G一起使用时,结果与e或E相同,但不会删除尾随零。
因此,在您的情况下,它似乎无济于事,因为
p
用于打印指针地址。我猜有些编译器可能对此有所不同,但是我找不到任何提及。
,p
指定打印地址(即指针)。 #
标志指定\“ alternate form \”,在这种情况下,可能在输出前加上pre5ѭ。
,这是格式标识符的标志。
它很可能会在指定值之前打印出0x(但我尚未检查TBH)
在这里找到一个很好的解释
,不确定是否有效使用\'#\'标志:
与o,x或X指定符一起使用
值以0、0x或0X开头
分别表示不同的值
大于零。
与e,E和f一起使用
强制写入的输出包含
小数点,即使没有数字
会跟随。默认情况下,如果没有
后跟数字,小数点不
书面。
与g或G一起使用
与e或E相同,但
尾随零不会被删除。
它很可能会为指针打印另一种格式的表格,将0x附加到地址之后。
,对于您的情况(p
转换),根据手册页,结果是不确定的。无论如何,%p
和%#p
在我的机器上打印相同的值(看起来像0x7FFFF000)