我是C编程的新手。我正在尝试逐行从文件中获取输入并打印每行的长度。 这是我的代码 -
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char name[100];
printf("Enter file name\n");
scanf("%s",name);
FILE * input;
input=fopen(name,"r");
char line[100];
fscanf(input,"%s",line);
while(!feof(input))
{
printf("%d\n",strlen(line));
fscanf(input,"%s",line);
}
return 0;
}
这是我的输入文件 -
172.24.2.1
172.24.2.225
172.17.4.41
172.24.4.42
202.16.112.150
172.24.152.10
这是correctly
打印每行的长度。但在编译期间我收到此警告 -
In function ‘main’:
main.c:24:4: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ [-Wformat=]
printf("%d\n",strlen(line));
所以我的问题是为什么我收到此警告,虽然我的输出是正确的,我该如何解决这个问题? 提前谢谢。
答案 0 :(得分:4)
函数strlen
返回类型为size_t
的对象(参见ISO 9899:2011§7.24.6.3)。您需要指定传递给printf
的参数的类型为size_t
,而不是int
。您可以通过添加z
长度修饰符(参见ISO 9899:2011§7.21.6.1/ 7)来指定类型为size_t
的对象。您还应该使用u
格式说明符,因为size_t
是无符号类型。
printf("%zu\n",strlen(line));