#include<stdio.h>
#include<stdlib.h>
int main()
{
char str1[20];
printf("Name: ");
scanf("%s",&str1);
printf("Your name is %s",str1);
return 0;
}
它输出良好,但构建消息显示
警告:格式"%s"需要char类型的参数,但参数2的类型为"char()[20]"[-Wformat=]
str1
具有类型"20个CCD_ 2〃的阵列;(char[20]
)。&
使指针指向操作数。因此CCD_ 5具有类型"0";指向20个CCD_ 6"的数组的指针;(char(*)[20]
)。
但是CCD_ 8期望该论点是";指向字符的指针";(char*
),并将输入字符存储到内存中从参数指向的位置开始的连续char
。因此&str1
不是正确的类型。
由于str1
是一个char数组,str1[0]
的类型只有char
,并且是数组的第一个元素,您希望scanf
开始存储到其中,因此&str1[0]
的类型例如为char*
,并指向正确的char
。
相反,您也可以只写str1
而不是char
0,因为数组通常会(但当&
直接应用于它们时不会)自动衰减为指向第一个元素的指针。
它对printf
的%s
的作用完全相同,只正确使用str1
。