gets函数出现的警告 与 我之前记录的一篇scanf函数报错的文章类似!
函数gets是ANSI C中的函数,其在读取时不检查边界,所以可能造成内存访问越界。例如分配了5个字节的空间,但读入了10个字节。
gets函数 在 ISO/IEC 9899 2011(C11)标准中已被移除!
当然,若忽视waring ,使用gets函数,程序也会成功编译 运行成功!
为了安全起见,这里我们可以使用vs C++ 特有的函数 gets_s。
格式:
gets_s(字符数组名,参数) 参数:参数为存储字符串的空间长度!
程序示例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
/*
输入一行字符,统计其中有多少个单词
单词之间用空格分隔开
*/
int main(void)
{
char str[81];
int i, num = 0, word = 0;
int c;
//从终端获取(输入)一行字符
printf("请输入一行字符(单词之间用空格分隔开):\n");
gets_s(str, 81);
/*
gets() 不安全,已在ISO/IEC 9899 2011(C11)标准中被移除,使用vs C++ 提供的特有gets_s()函数,格式:gets_s(字符数组名, 参数) 参数为存储字符串的空间长度!
*/
//进行判断字符串单词的个数
for (i = 0; ((c = str[i]) != '\0'); i++)
{
if (c == ' ')
word = 0;
else if (word == 0)
{
word = 1;
num++;
}
}
//输出字符串中单词的个数
printf("此字符串中总共有%d个单词\n", num);
system("pause");
return 0;
}