我在程序中收到警告,它说:
format '%c' expects argument of type 'char *' , but argument 2 has type 'char (*)[10]' [-Wformat]
这是我的程序:
#include<stdio.h>
int main()
{
char array[10];
scanf("%10c", &array);
printf("%.10s", array);
return 0;
}
当我从 scanf 中删除“&”时,警告消失。我知道,它是一个数组,不需要 &。但是它们的效果不一样吗?我的意思是 '&array' 和 'array' 都给出了它的第一个元素的地址,对吧?如果是这样,这里有什么区别?
我在这里阅读了一些相关的问题,并用谷歌搜索了很多。如果 'array' 是一个数组,而 'array' 本身是一个指向 char 的指针,则据说 '&array' 是一个指向字符数组的指针。根据它所说的,由于我使用的是 %c,我认为应该传递一个指向字符数组的指针。Idk,如果有人解释 %[width]c 的工作原理,我会非常感激。
我还验证了所有 'array'、'&array' 和 '&array[0]' 都给出了它的第一个元素的地址。这是我所做的:
int main()
{
char array[10];
puts("ADDRESS:");
printf(" %p \n %p \n %p", array, &array, &array[0]);
return 0;
}
如果他们都给出相同的地址,为什么会给出这样的警告?它也适用于 %s。它们在大多数 Windows 编译器中都可以正常工作,没有任何警告。
由于我是 windows 用户,我以前从未使用过 gcc 编译器。我在想的是,与函数指针一样,写 & 并不是强制性的。我读到,您不一定必须用函数指针编写 &。
我越来越糊涂了,求大神帮忙。
谢谢你。