【问题标题】:Problems with format specifiers格式说明符的问题
【发布时间】:2021-11-27 07:47:45
【问题描述】:

我不明白 %02lu 等声明中数字的含义。 如果我只用 %lu 写一个 lu 类型号,它会发生什么?我在文件上写了这样的数字。这种格式在我的代码中用于使用 DBGPRINT 在文件上写入 long long int

【问题讨论】:

  • 那些不是声明。它们是格式说明符。您是否花时间查看printf 的文档?
  • luunsigned long 的格式,02 表示如果数字小于 2 位,十用前导 0s 填充。
  • 关于编辑:%lu 用于long unsigned int%lld 用于long long int。请阅读专为您编写的文档!
  • 微软关于dbgprint的页面说:格式字符串支持大部分printf风格的format specification fields
  • 感谢大家,结果我知道了正确的事情,因为我在@Wheather Vane 发送的页面上阅读了这些内容。我的疑惑是因为写入的文件有相应的 11 位数字,所以我不确定我应该在格式说明符中指定 02 的原因。

标签: c windows


【解决方案1】:

如果您在搜索引擎中键入“man printf”,则第一个命中应该是a Linux manual page。它说:

0 该值应为零填充。对于 d, i, o, u, x, X, a, A、e、E、f、F、g、G转换,转换后的值 在左边用零而不是空白填充。如果 0 和 - 标志都出现,0 标志被忽略。如果 通过数字转换 (d, i, o, u、x 和 X),则忽略 0 标志。对于他人 转换,行为未定义。

所以这告诉您第一个 0 是用于比字段宽度短的零填充值。

然后我们在手册页的下方:

字段宽度 可选的十进制数字字符串(第一个数字非零) 指定最小字段宽度。如果转换后的值有 少于字段宽度的字符,它将被填充 左边的空格(或右边,如果左调整标志有 已给予)。 [...]

因此,%02ld 是一个转换说明符,可将长整数转换为十进制形式,同时确保任何需要少于 2 个字符的值都用零填充。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多