我正在阅读C for Dummies,我在书中做了一个例子。它告诉我要逐行写出来。然后它继续通过本书,即使代码有错误。这是:
#include <stdio.h>
int main()
{
char me[20];
printf("What is your name?");
scanf("%s",&me);
printf("Darn glad to meet you. %s!\n".me);
return(0);
}
根据gcc:
WHORU.C:在函数'int main()'中:WHORU.C:8:19:警告:格式'%s' 期望类型'char *'的参数,但参数2的类型为'char (*)[20]'[-Wformat] WHORU.C:9:43:错误:要求会员“我” '&#34;很高兴见到你。 %s!\ 012&#34;',它是非类型的'const char [28]'
因为我是C的新手,所以我无法指出我做错的地方。我知道这段代码在执行时需要输入。它有点像java中的扫描仪。
谢谢你们。
答案 0 :(得分:3)
scanf("%s",&me);
应该是:
scanf("%s",me);
scanf()
收到指向您传递的变量的指针。但是在C中,数组在传递时会衰减到指针,因此不需要&
。
另一个错误是,printf中的.
应为,
。
printf("Darn glad to meet you. %s!\n".me);
应该是:
printf("Darn glad to meet you. %s!\n",me);
答案 1 :(得分:2)
您只需使用scanf("%s",me);
来解决您的问题。在C me[]
中相当于*me
。
答案 2 :(得分:0)
我猜测scanf("%s",&me);
应该是scanf("%s",&me[0])
或scanf("%s",me)
,因为&me
是指向字符数组的指针,而&me[0]
是一个指向字符数组开头的单个字符的指针。我个人更喜欢第一种方式来做这件事,因为对我来说似乎更合乎逻辑,比如“在数组中取第一个字符的地址”
此外,printf("Darn glad to meet you. %s!\n".me);
应该有一个逗号,而不是字符串和“我”之间的句点,因为我是printf函数的参数。当你使用句号时,它正在寻找一个字符串上的成员“很高兴认识你。%s!\ n”这个名字叫“我”,它不存在。你会在java中遇到同样的问题,所以我猜这个只是一个错字。