C - 警告:格式'%s'在简单程序中需要 char 类型的参数问题


#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而不是char0,因为数组通常会(但当&直接应用于它们时不会)自动衰减为指向第一个元素的指针。


它对printf%s的作用完全相同,只正确使用str1