0

printfステートメントの読み取りに行き詰まったコードをいくつか実行しています。

printf("%*s%s\n", stat[type].dent, "", buf);

states[type].indentは 4 に等しい数値でbuf、文字列として 0 が格納された 215 バイトのバッファですが、確か""%*s はなく、そのためのものです。

printfこの声明を読むのを手伝ってくれる人はいますか?

4

6 に答える 6

2

*フォーマット コードの"%*s"printf、次の引数がフィールド幅であり、その後に通常の引数 (この場合は文字列) が続くことを示します。

たとえば、あなたの場合と同じ"%4s"ですが、幅は実行時に設定できます。

これstat[type].dentがフィールド幅で、空の文字列が文字列です。したがって、これは 4 文字幅の空の文字列を出力し (したがって 4 つのスペースを取得します)、その後にbuf.

すべてが文書化されている場所に関する適切なリファレンスprintfをお勧めします。

于 2013-08-12T08:32:15.343 に答える
2

出力される引数の*幅は、その前にある (整数) 引数に依存することを意味します。

cplusplusから:

printf ("Width trick: %*d \n", 5, 10); // 5 is the width, 10 is the integer being printed
于 2013-08-12T08:32:23.487 に答える
1

%*s文字列変換です。この*部分は、フィールドの幅がパラメーターとして提供されることを意味します (これstat[type].dentが使用方法です)。そのため、指定された幅 (N と呼びます) で空の文字列を出力しています。つまり、出力する前に N 個の空白を残しますbuf

于 2013-08-12T08:32:24.457 に答える
0

"%*s%s\n"3 つのディレクティブを含む形式です。

"%*s"

このディレクティブは文字列変換仕様です。は、フォーマットの後の次のパラメータから*フィールド幅 anを決定します。intOPが言及しているように、これはからの4の値ですstat[type].dent。次に、s変換仕様は次のパラメーター ( "") を取得し、それを へのポインターとして扱いますchar *。したがって、必要に応じて、最初にスペースを 4 つまで前にパディングして、 をprintf()出力します。""の文字列の長さ""が 0 であるため、ここでは 4 つのパディング スペースが必要です。最終結果: 4 つのスペースが出力されます。

"%s"

このディレクティブも文字列変換仕様で、次のパラメータ を取り、bufそれが であると想定し、char *その内容を出力します。OP がすべて0 であることを意味するかどうかは不明です。そうであれば、何も出力されません。

"\n"

この最後のディレクティブは単なるテキストなので、"\n"出力されます。

于 2013-08-12T18:17:28.613 に答える
0

*数値である値に置き換えられstat[type].dent、最小フィールド幅として知られます。

于 2013-08-12T08:32:37.637 に答える
0

文字列変換の最大バイト数を指定する精度です。

アスタリスク (*) は、使用する値 (精度) を指定する整数引数を使用します。

可変長の文字列を出力するには、 を指定しますprintf("%*s", l, string)。アスタリスクはlに置き換えられます。

于 2013-08-12T08:32:40.080 に答える