示例:scanf和char错误

时间:2012-07-08 05:38:49

标签: c char scanf

我正在阅读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中的扫描仪。

谢谢你们。

3 个答案:

答案 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中遇到同样的问题,所以我猜这个只是一个错字。