【发布时间】:2018-08-21 16:57:56
【问题描述】:
我开始学习 C 语言编程,我所指的代码书显示了一些带有gets() 的源代码,我的 IDLE 也能识别它。但是还是在编译的时候,我的编译器不同意。
谁能帮帮我?我在主函数中使用gets(),并使用clang作为编译器。
【问题讨论】:
-
可能是因为
gets已被一起删除。您收到的确切错误消息是什么?我很确定这是一个链接器错误。而且从不使用隐式声明,它们是上个世纪遗留下来的。 -
@Mr. Anderson 函数 get 是不安全的,不再被 C 标准支持。改用函数 fgets。你可以在网上找到它的描述。
-
string0.c:8:5: 错误:函数“gets”的隐式声明在 C99 [-Werror,-Wimplicit-function-declaration]gets(s1) 中无效; ^
-
@Mr.Anderson 好的,这实际上是一个编译器错误。显然,您使用的 C 编译器根本不允许隐式声明,这是一件好事。大约 20 年前,
gets函数已被弃用。只是不要使用它。阅读this -
三件事。 1:隐式声明只对返回
int的函数有效;gets()返回了char *,所以gets()的隐式声明无论如何都是错误的。 2: 从 C99 开始,根本不再允许隐式声明。 3:gets()自 C2011 起已从标准库中删除,因为它危险并且将在您的代码中引入故障点。永远不要使用它,即使在玩具代码中也不行。