2

我正在阅读 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: 错误:在 '"该死的很高兴认识你。%s!\012"' 中请求成员 'me',它属于非类类型 'const char [28 ]'</p>

因为我是 C 新手,所以我真的无法指出我做错了什么。我知道这段代码在执行时需要输入。这有点像java中的扫描仪。

多谢你们。

4

3 回答 3

3
scanf("%s",&me);

应该:

scanf("%s",me);

scanf()接收指向您传递的变量的指针。但是在 C 中,数组在传递时会衰减为指针,因此不需要&.

另一个错误是,您.在 printf 中有 a 应该是 a ,

printf("Darn glad to meet you. %s!\n".me);

应该:

printf("Darn glad to meet you. %s!\n",me);
于 2012-07-08T05:50:34.033 回答
2

您只需使用scanf("%s",me);它应该可以解决您的问题。在 Cme[]中相当于*me.

于 2012-07-08T05:42:27.513 回答
0

我会冒险猜测scanf("%s",&me);应该是scanf("%s",&me[0])或者scanf("%s",me)因为&me是指向字符数组的指针,而是&me[0]指向字符数组开头的单个字符的指针。我个人更喜欢第一种方法,因为它对我来说似乎更合乎逻辑,如“获取数组中第一个字符的地址我”

此外,printf("Darn glad to meet you. %s!\n".me);字符串和“me”之间可能应该有一个逗号,而不是一个句点,因为 me 是 printf 函数的参数。当您使用句点时,它会在字符串“Darn 很高兴见到你。%s!\n”中寻找一个名为“me”的成员,该成员不存在。你会在java中遇到同样的问题,所以我猜这只是一个错字。

于 2012-07-08T05:44:18.287 回答