C++ 寻找C+的解释者+;11使用多个值的printf格式参数

C++ 寻找C+的解释者+;11使用多个值的printf格式参数,c++,c++11,printf,C++,C++11,Printf,我已经开始在大量使用C++11的代码库中工作。我找到了很多资源来帮助我学习,但我找不到任何关于我看到使用的printf格式字符串类型的提及: printf( "%.*s", integerValue, charPointer ); 我想我知道它在做什么:integerValue是字符缓冲区的长度。然而,我几十年的C/C++经验告诉我,这是格式字符串中的一个单参数规范,但它在格式字符串后消耗两个值 这种新奇的行为记录在哪里?是否有更多这样的多值消耗printf格式参数?我一直在搜索printf格

我已经开始在大量使用C++11的代码库中工作。我找到了很多资源来帮助我学习,但我找不到任何关于我看到使用的printf格式字符串类型的提及:

printf( "%.*s", integerValue, charPointer );
我想我知道它在做什么:integerValue是字符缓冲区的长度。然而,我几十年的C/C++经验告诉我,这是格式字符串中的一个单参数规范,但它在格式字符串后消耗两个值


这种新奇的行为记录在哪里?是否有更多这样的多值消耗printf格式参数?我一直在搜索printf格式的字符串文档,但什么也没找到

是格式说明符的良好参考。在某些细节中,转换规范包括:

  • 介绍性
    %
    字符
  • (可选)修改转换行为的一个或多个标志:
    • -
      :转换结果在字段内左对齐(默认情况下为右对齐)
    • +
      :有符号转换的符号始终在转换结果的前面(默认情况下,只有当结果为负数时,结果前面才加负号)
    • 空格:如果有符号转换的结果不是以符号字符开头,或为空,则在结果前面加空格。如果存在
      +
      标志,则忽略该标记
    • #
      :执行替代形式的转换。具体效果见下表,否则行为未定义
    • 0
      :对于整数和浮点数转换,前导零用于填充字段,而不是空格字符。对于整数,如果明确指定了精度,则忽略该值。对于其他转换,使用此标志会导致未定义的行为。如果存在
      -
      标志,则忽略该标记
  • (可选)指定最小字段宽度的整数值或
    *
    。如果需要,结果将用空格字符填充(默认情况下),右对齐时填充在左侧,左对齐时填充在右侧在使用
    *
    的情况下,宽度由类型为
    int
    的附加参数指定。如果参数值为负值,则结果为指定的
    -
    标志和正字段宽度。(注意:这是最小宽度:该值永远不会被截断。)
  • (可选)
    后跟整数或
    *
    ,或两者都不指定转换精度在使用
    *
    的情况下,精度由类型为
    int
    的附加参数指定。如果此参数的值为负值,则忽略它。如果既不使用数字也不使用
    *
    ,则精度为零。有关精度的确切影响,请参见下表
  • (可选)指定参数大小的长度修饰符
  • 转换格式说明符
(我的重点)


因此,当使用
*
作为字段宽度或(在
之后)作为精度时,您需要指定一个额外的整数参数。

当然,与往常一样,在中“这一新奇的行为记录在哪里?”。你应该先看一遍:)你说的“新奇”是指“像山一样古老”,对吗?:)我发誓我先看了手册页,还有下面答案链接的页面。我一定是仔细查看了我想要的信息,但没有意识到。我对“新奇”的使用是幽默。