我是一个即将开始第二年的计算机系学生。在准备过程中,我正在阅读Mark Handley的《Java程序员的C编程入门》。
在里面我发现了这个密码,我决定自己试试:
#include <stdlib.h>
main()
{
char *s1;
char s2[80];
char *s3;
s1 = "Hello";
s3 = malloc(80);
printf("Enter your first name:\n");
fgets(s2, 80, stdin);
printf("Enter your last name:\n");
fgets(s3, 80, stdin);
printf("%s %s %s\n", s1, s2, s3);
free(s3);
}
在尝试使用GCC编译时,出现以下错误:
strings.c: In function ‘main’:
strings.c:11: warning: incompatible implicit declaration of built-in `
`function ‘printf’
strings.c:12: error: ‘stdin’ undeclared (first use in this function)
strings.c:12: error: (Each undeclared identifier is reported only once
strings.c:12: error: for each function it appears in.)
就像我说的,这是从文本中复制的代码,所以我有点沮丧,它不起作用。我想这一定与GCC的版本有关。如果有人能帮助我朝着正确的方向去理解这里发生的事情,我将不胜感激。谢谢!
更新:根据下面的有用建议更改了代码,它可以工作。它没有在文本中明确说明要尝试这段代码,我自己承担了这一任务。我认为作者只是想展示如何在C中处理字符串,以及它与Java的区别。谢谢大家,我真的很感激!
最佳答案
您的代码依赖于printf
、fgets
和stdin
的隐式声明以及main()
的旧签名。它不会编译,因为它当前不是有效的C(它甚至不是有效的C89,第一个C标准)。
您需要在这些定义所在的位置包含stdio.h
。GCC允许您使用main()
的签名作为扩展,但它在技术上仍然不是有效的C。
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *s1;
char s2[80];
char *s3;
s1 = "Hello";
s3 = malloc(80);
printf("Enter your first name:\n");
fgets(s2, 80, stdin);
printf("Enter your last name:\n");
fgets(s3, 80, stdin);
printf("%s %s %s\n", s1, s2, s3);
free(s3);
return 0; /* not necessary, but it's good practice */
}