gpt4 book ai didi

c - 警告 : field width specifier '*' expects argument of type 'int' , 但参数 2 的类型为 'size_t' {aka 'long unsigned int' }

转载 作者:行者123 更新时间:2023-11-30 14:52:11 25 4
gpt4 key购买 nike

代码:

#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。

<小时/>
printf("%*s\n", (int)(strlen("foo")+number), "foo");
<小时/>

但是如果您想避免强制转换,可以使用变量作为长度参数:

<小时/>
#include <stdio.h>
#include <string.h>

int main(void) {
int number = 2;
int fmtlen;

fmtlen = strlen("foo") + number;
printf("%*s\n", fmtlen, "foo");
return 0;
}
<小时/>

注意:正确的类型对于 printf() 的参数至关重要,因为它是一个可变参数函数:printf 确定其参数类型的唯一方法是检查格式字符串。 * 需要一个 int。

关于c - 警告 : field width specifier '*' expects argument of type 'int' , 但参数 2 的类型为 'size_t' {aka 'long unsigned int' },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com