一尘不染

隐式声明“获取”

linux

我了解“隐式声明”通常意味着必须在调用函数之前将其置于程序的顶部,否则我需要声明原型。
但是,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);
   }
}

阅读 231

收藏
2020-06-03

共1个答案

一尘不染

没错,如果您包含适当的标头,则不应收到隐式声明警告。

然而,该功能gets()已被 删除 ,从C11的标准。这意味着gets()in中不再有原型<stdio.h>gets() 曾经
<stdio.h>

删除的原因gets()是众所周知的:它不能防止缓冲区溢出。因此,您永远不应使用gets()fgets()而应改用尾随的换行符(如果有)。

2020-06-03