【发布时间】:2020-09-12 17:57:54
【问题描述】:
我的代码非常简单,只是基本的 IO。现在,当我使用此代码时,它可以完美运行。
#include <stdio.h>
int main()
{
int age = 0;
char name[100]; //Unlike c++ We need to specify char limit instead of "Name", so name can't go above 99 char + 1 terinator
printf("Enter your age: ");
scanf("%d", &age);
printf("Enter your name: ");
scanf("%s", name);// dont need & for char
printf("Your name is %s and your age is %d\n", name, age);
return 0;
}
现在
#include <stdio.h>
int main()
{
int age = 0;
char name[100]; //Unlike c++ We need to specify char limit instead of "Name", so name can't go above 99 char + 1 terinator
printf("Enter your age: ");
scanf("%d", &age);
printf("Enter your name: ");
scanf("%s", &name);// dont need & for char
printf("Your name is %s and your age is %d\n", name, age);
return 0;
}
当我在第 10 行进行更改并添加 &name.编译器抛出此错误。这是为什么呢?
p2.c:10:17: error: format specifies type 'char *' but the argument has type 'char (*)[100]' [-Werror,-Wformat]
scanf("%s", &name);// dont need & for char
~~ ^~~~~
我对 C 了解不多。
【问题讨论】:
-
因为在第二个代码中 sn -p
%s需要 char 数组的起始地址。所以,name存储数组的起始地址。在 char%c中也需要地址。在char ch;ch不会返回您需要使用&ch的地址。 -
@Sathvik:
name不存储地址 - 根据需要将名称转换为地址。