警告:函数的隐式声明‘;获取’;;你是说‘;fgets’;?[-Wimplicit函数声明]

警告:函数的隐式声明‘;获取’;;你是说‘;fgets’;?[-Wimplicit函数声明],c,C,我刚刚开始我的编程之旅。我在Ubuntu终端上编写代码。在编译使用get()函数的程序时,我遇到了一个问题 #include<stdio.h> /*example of multi char i/p function*/ void main() { char loki[10]; gets(loki); printf("puts(loki)"); } 在Ubuntu上,在终端上运行manget。它应该向您显示手册页 该文件以书面英语说明: 切勿使用此功能。

我刚刚开始我的编程之旅。我在Ubuntu终端上编写代码。在编译使用
get()
函数的程序时,我遇到了一个问题

#include<stdio.h>

/*example of multi char i/p function*/
void main()
{
    char loki[10];
    gets(loki);
    printf("puts(loki)");
}

在Ubuntu上,在终端上运行
manget
。它应该向您显示手册页

该文件以书面英语说明:

切勿使用此功能。

更一般地说,<>强>编程之前,阅读文档。对于Linux上的C,考虑阅读,这个,许多C编程,以及C11标准。 英文维基百科也是如此

最后,

警告:“函数“gets”的隐式声明”;你是说“fgets”吗?[-Wimplicit函数声明]

对我来说似乎很清楚,因为是用英语写的。根据经验,确保您的程序在编译时没有警告。也请阅读

你可能对理解缩略语感兴趣

我(1985年)通过阅读SunOS3手册(当时在纸上,在工作中,与我当时有幸使用的Sun3/160工作站一起出售)从第1节到第9节学习了C和Unix编程

你可以在手册页之前阅读


我刚刚开始我的编程之旅

那么我推荐阅读。在我祖父的眼中,即使在2019年,它仍然是编程的最佳入门。另见。不管SICP是否使用了一些在专业现实生活中不太常用的编程语言(但要深入了解):编程是关于概念的,而不是关于编码。您将通过SICP学习的概念肯定会帮助您以后编写更好的C代码。当然读了



注意。我是法国人(生于1959年),所以不是以英语为母语的人。但是我在读博士的时候,当然在高中的时候,还有我自己的父母教我读书。当我在大学教一些CS课程时,我告诉学生的第一件事就是阅读。永远不要为阅读感到羞耻。

get
在C11中被删除,因为它是
gets
不知道它可以在数组中存储多少个字符,并继续按照用户提供的数量写入,这导致程序具有未定义的行为—崩溃、修改无关数据等

修复方法是使用
fgets
,但要记住,它会在缓冲区中留下一个换行符:

#include <stdio.h>

// example of multi char i/p function
int main(void)
{
    char loki[10];
    fgets(loki, 10, stdin);

    // now loki will have the new line as the last character
    // if less than 9 characters were on the line

    // we can remove the extra with `strcspn`:
    loki[strcspn(loki, "\n")] = 0;

    // this will print the given string followed by an extra newline.
    puts(loki);
}
#包括
//多字符i/p函数示例
内部主(空)
{
char-loki[10];
fgets(洛基,10岁,标准膳食);
//现在洛基将以新行作为最后一个角色
//如果行中少于9个字符
//我们可以用“strcspn”删除多余的内容:
loki[strcspn(loki,“\n”)]=0;
//这将打印给定字符串,后跟一个额外的换行符。
普茨(洛基);
}

在Ubuntu上,用一个终端运行
mangets
gets
函数已从标准库中删除!(在旧版本中有,但被宣布为“危险”,随后被删除。)你应该使用
fgets(loki,10,stdin)。进一步编程的小技巧:确保
main
函数的返回类型为
int
,并在成功退出时返回0:)如果您正在阅读一本使用
void main
的书,您应该阅读
#include <stdio.h>

// example of multi char i/p function
int main(void)
{
    char loki[10];
    fgets(loki, 10, stdin);

    // now loki will have the new line as the last character
    // if less than 9 characters were on the line

    // we can remove the extra with `strcspn`:
    loki[strcspn(loki, "\n")] = 0;

    // this will print the given string followed by an extra newline.
    puts(loki);
}