如何修复 C 程序的编译警告 'char *'

How to fix a compiling warning on a C program 'char *'

我在 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);

正如警告所说,您需要将 %schar * 参数匹配。 buf 是一个数组,因此只要在此上下文中使用它的名称就会导致它衰减为指向其第一个元素的指针 - 这正是您想要的:

    printf("%s\n", buf);

使用 & 显式传递一个指针到你的数组;它将是相同的文字地址,但具有不同的类型,这就是你的警告所说的。