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

发布于 2024-10-31 16:04:08 字数 136 浏览 2 评论 0原文

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

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

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

I never see %#p (%.2d) before,how does it work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

好菇凉咱不稀罕他 2024-11-07 16:04:08

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

与 o、x 或 X 说明符一起使用,对于不为零的值,值前面分别带有 0、0x 或 0X。

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

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

所以在你的情况下它似乎没有做任何事情,因为 p 用于打印指针地址。我想有些编译器可能会对此有不同的解释,但我找不到任何提及。

From http://www.cplusplus.com/reference/clibrary/cstdio/printf/:

Used with o, x or X specifiers the value is preceeded with 0, 0x or 0X respectively for values different than zero.

Used with e, E and f, it forces the written output to contain a decimal point even if no digits would follow. By default, if no digits follow, no decimal point is written.

Used with g or G the result is the same as with e or E but trailing zeros are not removed.

So it seems to do nothing in your case, since p is used to print a pointer address. I guess some compilers might interpret this differently, but I can't find any mention of it.

仄言 2024-11-07 16:04:08

p 指定打印一个地址(即指针)。 # 标志指定“替代形式”,在本例中,可能会在输出前面添加 0x

p specifies to print an address (i.e. a pointer). The # flag specifies "alternate form", which in this case, probably prepends 0x to the output.

情归归情 2024-11-07 16:04:08

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

找到了一个很好的解释 此处

It's a flag for the format identifier.
It will more than likely print out 0x before the pointed value (but I have not checked TBH)

A good explanation is found here

っ左 2024-11-07 16:04:08

不确定这是否是“#”标志的有效使用:

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

它很可能会打印指针的替代格式形式,并将 0x 附加到地址。

Not sure if that is a valid use of the '#' flag:

  • Used with o, x or X specifiers the
    value is preceeded with 0, 0x or 0X
    respectively for values different
    than zero.
  • Used with e, E and f, it
    forces the written output to contain
    a decimal point even if no digits
    would follow. By default, if no
    digits follow, no decimal point is
    written.
  • Used with g or G the result
    is the same as with e or E but
    trailing zeros are not removed.

It will most likely print an alternately formatted form for the pointer, appending 0x to the address.

感悟人生的甜 2024-11-07 16:04:08

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

In your case (p conversion) the result is undefined according to the man page. Anyway, %p and %#p prints the same value on my machine (looks like 0x7FFFF000)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文