【发布时间】:2018-05-23 15:58:25
【问题描述】:
代码:
#include <stdio.h>
#include <string.h>
int main(void) {
int number = 2;
printf("%*s\n", strlen("foo") + number, "foo");
return 0;
}
警告:
prog.c: In function 'main':
prog.c:5:14: warning: field width specifier '*' expects argument of type 'int', but argument 2 has type 'size_t' {aka 'long unsigned int'} [-Wformat=]
printf("%*s\n", strlen("foo") + number, "foo");
~^~ ~~~~~~~~~~~~~~~~~
是否可以在不将strlen() 的结果转换为int 的情况下消除此警告,同时将宽度说明符保留为变量?如果是,怎么做?
【问题讨论】:
-
不,printf 期望
*的 int,所以只需给它一个 int。-->> 将其转换为 int。 :(int)(strlen("foo") + 2) -
是的@wildplasser,这也是我的结论,但我问是因为我可能错了..也许除了星星之外还有其他东西可以使用..嗯...跨度>
-
printf(" %s\n", "foo");更简单,恕我直言。(甚至:printf(" foo\n");) -
但是我将如何传递一个宽度变量然后@wildplasser,似乎铸造是要走的路。
-
你的表达式是常量,不是变量。
标签: c string printf format-specifiers size-t