57

私が維持しなければならないいくつかのコードで、フォーマット指定子を見ました%*s。これが何であり、なぜそれが使用されているのか誰か教えてもらえますか?

その使用例は次のようになります。

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

6 に答える 6

64

フィールドの幅を動的に指定するために使用されます

  • 幅はフォーマット文字列では指定されませんが、フォーマットする必要がある引数の前に追加の整数値引数として指定されます。

そのため、「インデント」は、パラメーター リストでそれに続く文字列に割り当てるスペースを指定します。

そう、

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

と同じです

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

ループを回避して、ファイルにスペースを入れるのは良い方法です。

于 2009-06-16T10:04:03.137 に答える
10

「長さ」フィールドのみを出力すると考えて、NULL 終端されていない (パックされた) バッファーで「%*s」を使用しないでください。

于 2013-09-19T15:24:40.800 に答える
2

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

文字列を無視するために使用されます。

于 2021-05-29T07:52:53.697 に答える
1

* fprintf は、n 文字幅になるまで出力をパディングします。ここで、n は、変更された型によって表される直前の関数引数に格納されている整数値です。

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
于 2009-06-16T10:07:26.547 に答える
1

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

幅はフォーマット文字列では指定されませんが、フォーマットする必要がある引数の前に追加の整数値引数として指定されます。

例:printf("%*s", 4, myValue);と同等printf("%4s", myValue);です。

于 2009-06-16T10:08:45.203 に答える