问题描述
我在C程序上收到以下警告。它确实运行。但是,如何解决警告?
warning: format specifies type 'char *' but the argument has type 'char (*)[100]' [-Wformat]
printf("%s\n",&buf);
代码如下:
FILE *fp = fopen(filename,"r");
int len = 0;
char buf[100];
printf("\n sorting \n");
while (fscanf(fp,"%s",buf) != EOF)
{
printf("%s\n",&buf);
len++;
}
printf("Sorted\n");
解决方法
此行是错误的:
printf("%s\n",&buf);
如警告所述,您需要将%s
与char *
参数进行匹配。 buf
是一个数组,因此仅在此上下文中使用其名称将导致其衰减为指向其第一个元素的指针-正是您想要的:
printf("%s\n",buf);
使用&
显式将指针传递给您的数组;它将是相同的文字地址,但具有不同的类型,这就是您的警告所表示的。