c - 'gets' 的隐式声明

标签 c linux gets

我理解“隐式声明”通常意味着函数在调用之前必须放在程序的顶部,或者我需要声明原型(prototype)。
但是,gets 应该在 stdio.h 文件中(我已经包含了)。
有什么办法可以解决这个问题吗?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char ch, file_name[25];
   FILE *fp;

   printf("Enter the name of file you wish to see\n");
   gets(file_name);
   fp = fopen(file_name,"r"); // read mode
   if( fp == NULL )
   {
      perror("Error while opening the file.\n");
      exit(EXIT_FAILURE);
   }
}

最佳答案

你是对的,如果你包含正确的标题,你不应该得到隐式声明警告。

然而,函数gets()已从 C11 标准中删除。这意味着不再有 gets() 的原型(prototype)在 <stdio.h> . gets() 曾经<stdio.h> .

删除gets()的原因众所周知:它无法防止缓冲区溢出。因此,你不应该使用 gets()并使用 fgets() 相反,并处理尾随的换行符(如果有的话)。

关于c - 'gets' 的隐式声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34031514/

相关文章:

c++ - 如何在此循环中获得始终如一的高吞吐量?

c - svm_light 的 svm_learn 命令不起作用

linux - insmod错误: inserting './hello.ko' : -1 Invalid module format"

c - 如何更改键盘布局(X11 API 解决方案)

c - 为什么它给出错误“在 Microsoft Visual 中找不到获取标识符”?

c - 替代获取?

c - 在unix上运行C程序而不是在命令行中

这段代码可以称为递归吗?如果不是,下面给出的代码或递归哪个更有优势?

c++ - 如何在 Ubuntu 的后台进程中获取数据

ruby - 使用 "gets"从另一个奇怪的错误运行 ruby​​ 脚本