初学者问题。我有以下代码:
char input[10];
scanf("%s", &input);
我的编译器抛出以下警告:
warning: format '%s' expects type 'char *', but argument 2 has type 'char (*)[10]'
warning: format '%s' expects type 'char *', but argument 2 has type 'char (*)[10]'
更改为:
char * input;
似乎没有帮助。我做错了什么?
答案 0 :(得分:10)
因为数组已经可以用作指针,所以你不需要address-of运算符。
如果再次阅读警告消息,您将看到当您在阵列上使用address-of运算符时,您将获得指向该数组的指针。
答案 1 :(得分:5)
尝试,
char input[10];
scanf("%s", input);
您不必为地址运算符(&
)提供数组input
的名称。
答案 2 :(得分:1)
%s
格式字符串接受char*
类型的参数,其中&intput
的类型为char (*)[10]
,这是您收到警告的原因。
format '%s' expects type 'char *', but argument 2 has type 'char (*)[10]
注意2
&input
为scanf()
scanf("%s", &input);
^ ^
| argument-2
argument-1
要更正此代码,您应该编写scanf,如:
scanf("%s", input);
旁注::如果您使用字符串地址,&input
和input
的值相同,但语义上两者都不同。
&input
是char(*) [10]
类型的数组地址,而input
类型为char[10]
要了解&input
和input
之间的区别,请阅读以下两个答案:
修改:
更改为:char *input
无法帮助您,除非您将内存分配给input
答案 3 :(得分:0)
char input[10]
是一个字符数组
input
本身代表数组的基址,即char *
您无需使用运算符(&
)的地址。相反,使用:
char input[10];
scanf("%s", input);
如果您使用char * input;
,则需要使用malloc
为其分配空间。但在这种情况下,也不需要使用 运算符的 地址。
答案 4 :(得分:0)
scanf("%s", input);
你会得到答案。
答案 5 :(得分:0)