我了解“隐式声明”通常意味着必须在调用函数之前将其置于程序的顶部,否则我需要声明原型。 但是,gets应该在stdio.h文件中(该文件已包含在内)。 有没有什么办法解决这一问题?
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()in中不再有原型<stdio.h>。gets() 曾经 在<stdio.h>。
gets()
<stdio.h>
删除的原因gets()是众所周知的:它不能防止缓冲区溢出。因此,您永远不应使用gets(),fgets()而应改用尾随的换行符(如果有)。
fgets()