私はCコードで次のように定義しています:
#define set_str(r,s) sprintf(r, "%-.*s", (int)sizeof(r)-1,s)
シンボルの意味を理解するためにコード内で関数 set_str を呼び出してみましたが、特別な書式設定などは行われず、変数がそのままコピーされました。これの意味を誰か教えてくれませんか?
私はCコードで次のように定義しています:
#define set_str(r,s) sprintf(r, "%-.*s", (int)sizeof(r)-1,s)
シンボルの意味を理解するためにコード内で関数 set_str を呼び出してみましたが、特別な書式設定などは行われず、変数がそのままコピーされました。これの意味を誰か教えてくれませんか?
フォーマットされた出力といくつかの文字に他なりません。
%--> は、後の文字%がプレースホルダーであり、それぞれの引数に置き換えられることを意味します。
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. `
幅を指定sizeof(r) -1するsprintf()のは、宛先バッファーがオーバーフローしないようにするためです。
rがポインタの場合、これは機能しません。これは、sizeof(char*)が割り当てられた文字のサイズを提供しないためです。
たとえば、rが以下のように割り当てられている場合、上記のマクロは期待どおりに機能しません。
char *r = malloc(50);
-@Omkantが言ったように、LEFT調整に使用されます.10.進数以下の投稿については、より適切に説明し*ます..