这种格式化程序是什么意思?

|
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)     

要回复问题请先登录注册