私は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.
進数以下の投稿については、より適切に説明し*
ます..