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 s--> 将被替换s为字符串。

sprintf()意味着打印到缓冲区。在这种情况下,它是r.

编辑:如果是.,请参阅此一般打印场景。

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) -1sprintf()确保目标缓冲区不会溢出。

r当是指针时,这将不起作用,因为sizeof(char*)不会给出为其分配的字符大小。

例如,如果r按以下方式分配,上述宏将无法按预期工作。

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

-正如@Omkant 所说,用于向左调整,.对于小数和下面的帖子将更好地描述*..

%*s 格式说明符是什么意思?

于 2012-12-20T13:09:32.730 回答