6

我正在使用创建一个程序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];

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

4

3 回答 3

9

数组已经是一个类似指针的对象(正如 dreamlax 指出的那样)。您不需要&操作员,因为声明

char path[64];

相当于设置path一个指向 64 字节内存区域的指针。

于 2013-10-18T00:23:50.880 回答
4

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

于 2013-10-18T00:30:14.107 回答
1

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

于 2013-10-18T00:23:26.187 回答