warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
5.c: In function ‘getinfo’:
5.c:20:2: warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(temp.fname);
警告:不建议使用gets函数。
gets 已被弃用,因为它很危险,可能会导致缓冲区溢出。
解决方案使用 fgets 代替: fgets(temp,sizeof(temp),stdin);
虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建议使用 fgets()。
fgets() 的原型为:
# include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
# include <stdio.h>
int main(void)
{
char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/
printf("请输入一个字符串:");
fgets(str, 7, stdin); /*从输入流stdin即输入缓冲区中读取7个字符到字符数组str中*/
printf("%s\n", str);
return 0;
}
#include <stdio.h>
int main( )
{
char str[100];
printf( "Enter a value :");
// gets( str );
fgets(str, 100, stdin);
printf( "\nYou entered: ");
puts( str );
return 0;
}