1

私はCコードで次のように定義しています:

#define set_str(r,s) sprintf(r, "%-.*s", (int)sizeof(r)-1,s)

シンボルの意味を理解するためにコード内で関数 set_str を呼び出してみましたが、特別な書式設定などは行われず、変数がそのままコピーされました。これの意味を誰か教えてくれませんか?

4

3 に答える 3

5

フォーマットされた出力といくつかの文字に他なりません。

%--> は、後の文字%がプレースホルダーであり、それぞれの引数に置き換えられることを意味します。

But here few things came into picture that's why you are confused.

.--> まさに占有スペースを*意味しますsizeof(r)-1

*--> 印刷される文字のサイズまたは幅を指定し、*に置き換えられsizeof(r)-1ます。

---> 左揃えまたは位置合わせ用です。

last --> はwhich is stringsに置き換えられます。s

sprintf()バッファへの出力も意味します。この場合はr.

EDIT : の場合.、この印刷の一般的なシナリオを参照してください。

printf("%sx.yz",args); 
// just forget about the `args` it can be as many as the format specifiers,
// it's an example for one argument.

s = sign, can be `+` or `-`.`+` means right adjustment `-`means left adjustment. 
x = At least `x` characters wide.
y = Exactly `y` charactes wide.
z = format specifier like `s`,`d`,`f` and so on as for corresponding arguments. `
于 2012-12-20T13:02:38.080 に答える
2

幅を指定sizeof(r) -1するsprintf()のは、宛先バッファーがオーバーフローしないようにするためです。

rがポインタの場合、これは機能しません。これは、sizeof(char*)が割り当てられた文字のサイズを提供しないためです。

たとえば、rが以下のように割り当てられている場合、上記のマクロは期待どおりに機能しません。

char *r = malloc(50);
于 2012-12-20T13:17:37.713 に答える
0

-@Omkantが言ったように、LEFT調整に使用されます.10.進数以下の投稿については、より適切に説明し*ます..

%*s 書式指定子の意味は何ですか?

于 2012-12-20T13:09:32.730 に答える