格式’%s’需要’char *’类型的参数,但参数2的类型为’char(*)

我正在使用C创建一个程序,我的代码中有这一行:

 scanf("%s", &path); 

当我编译源文件时,我收到此警告:

 main.c:84:2: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[64]' [-Wformat] 

这是path变量的声明:

 char path[64]; 

为什么我看到这个错误? 我该如何解决?

数组已经是一个类似指针的对象(正如dreamlax指出的那样)。 声明后,您不需要&运算符

 char path[64]; 

等效于设置指向64字节内存区域的指针的path

%s格式说明符要求您提供char * ,它是指向char的指针。 您正在传递&path ,它是指向数组的指针。 您可以单独传递path ,它将评估指向数组的第一个元素的指针(与&path[0] )。

试试这个scanf("%s", path); 相反,因为我认为path是一个数组,指向数组的指针是数组名称本身(array ==&array)