【问题标题】:What does the %*s format specifier mean?%*s 格式说明符是什么意思?
【发布时间】:2010-11-03 06:54:03
【问题描述】:

在我必须维护的一些代码中,我看到了格式说明符 %*s 。谁能告诉我这是什么以及为什么使用它?

其用法示例如下:

fprintf(outFile, "\n%*s", indent, "");

【问题讨论】:

  • 重要的是indent 的提升类型是int

标签: c printf format-specifiers


【解决方案1】:

在 printf 和 fprintf 中使用时:

printf("%*s", 4, myValue); is equivalent to printf("%4s", myValue);

它以最小宽度显示变量,其余右对齐空格。要使值左对齐,请使用负整数。

在 scanf 和 sscanf 中使用时:

/* sscanf example */
#include <stdio.h>

int main ()
{
  char sentence []="Rudolph is 12 years old";
  char str [20];
  int i;

  sscanf (sentence,"%s %*s %d",str,&i);
  printf ("%s -> %d\n",str,i);
  
  return 0;
}

输出:

Rudolph -> 12

用于忽略字符串。

【讨论】:

  • in sscanf(), "%s"gets() 差,因为它没有宽度限制。
【解决方案2】:

格式说明符 %4s 输出一个字段宽度为 4 的字符串,即 printf 显示的值至少包含 4 个字符位置。

如果要输出的值是less而不是4个字符位置宽,则字段中默认值为right justified

如果值是greater 比4 个字符位置宽,则字段宽度expands 以容纳适当数量的字符。

要使值左对齐,请使用负整数指定字段宽度。

参考:Java™ How To Program (Early Objects), Tenth Edition

【讨论】:

    【解决方案3】:

    不要在非 NULL 终止(打包)的缓冲区上使用“%*s”,以为它只会打印“长度”字段。

    【讨论】:

    • 使用 "%.*s" 来实现!
    • @AndyG 我无法理解 '%.*s' 对此有何帮助。从文档here 看来,这两个格式说明符之间的唯一区别是 '%.*s' 忽略了负精度值。
    • @powersource97, %.*s 表示您正在从参数读取precision 值,精度是要打印的最大字符数,%*s 您正在读取width参数中的值,这是要打印的最小 os 字符数。
    【解决方案4】:

    It's used to specify, in a dynamic way, what the width of the field is:

    • 格式字符串中没有指定宽度,而是作为附加 前面的整数值参数 必须格式化的参数。

    所以“缩进”指定为参数列表中跟在它后面的字符串分配多少空间。

    所以,

    printf("%*s", 5, "");
    

    一样
    printf("%5s", "");
    

    这是在文件中放置一些空格以避免循环的好方法。

    【讨论】:

    • @EthanHeilman,* 表示在 scanf 系列函数中完全不同的东西。
    • 请注意,如果您有一个负数,该字段将左对齐。也就是说,printf("[%*s]\n", -10, "hello") 将输出“[hello     ]”,而不是使用+10(或10)会得到的“[     hello]”。
    【解决方案5】:

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

    宽度没有在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。

    例如:printf("%*s", 4, myValue); 等价于 printf("%4s", myValue);

    【讨论】:

      【解决方案6】:

      * 使 fprintf 填充输出直到它有 n 个字符宽,其中 n 是存储在 a 函数参数中的整数值,就在修改后的类型表示的参数之前。

      printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
      

      【讨论】:

        猜你喜欢
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 1970-01-01
        • 2022-04-08
        • 1970-01-01
        • 2014-12-24
        相关资源
        最近更新 更多