阵列我在我的节目一个警告,它说:C编程: '和' 用在scanf
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中删除'&'时警告消失。 我知道,这是一个数组,不需要&。但是,它们不一样吗? 我的意思是'&数组'和'数组'给它的第一个元素的地址,对吧? 如果是这样,这里有什么区别?
我在这里阅读了一些相关的问题,并且搜索了很多。 有人说'&数组'是一个指向字符数组的指针,如果'数组'是一个数组而'数组'本身是一个指向字符的指针。 根据它所说的,因为我使用%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编译器。我在想的是,只要不是像函数指针那样编写&。 你不一定要写&与函数指针,我读。
我越来越困惑,请帮我弄明白。
谢谢。
@ruakh 感谢编辑。 – 1lastBr3ath