vs c++ 警告提示:warning C4013: “gets”未定义;假设外部返回 int

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;
}

​

​

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值