C++中 scanf 和 gets 的使用

一、错误

vs 中不能直接使用 scanf 、gets 等 C 标准库函数。

二、原因

因为 vs 使用更安全的 c11 标准 , 认为这类函数不安全。
注:这类函数正常使用时,是没有任何问题的。
但是,部分黑客可能会利用其中的缺陷,开发恶意软件,对系统造成影响。

三、解决方法

使用 c11 标准中的“更安全”的函数替代。

1、scanf_s

int x;
scanf_s("%d", &x); //不需要使用第 3 个参数,用法和 scanf 相同

float f;
scanf_s("%f", &f); //不需要使用第 3 个参数, 用法和 scanf 相同

char c;
scanf_s("%c", &c, sizeof(c)); //需要使用第 3 个参数, 否则有告警

char name[16];
scanf_s("%s", name, sizeof(name)); //需要使用第 3 个参数

int age;
char name[16];
scanf_s("%d%s", &age, name, sizeof(name));

2、gets_s

char line[32];
gets_s(line, sizeof(line));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 可能是以下原因导致的: 1. scanf语句的格式控制符不正确,导致无法输入。 2. 缓冲区还有其他字符,导致scanf无法读取输入。 3. 程序有其他错误,导致scanf无法正常工作。 解决方法: 1. 检查scanf语句的格式控制符是否正确。 2. 在scanf语句前加上fflush(stdin)语句,清空缓冲区。 3. 检查程序是否有其他错误,如语法错误、逻辑错误等。 希望以上方法能够帮助你解决问题。 ### 回答2: Dev C是一款经典的C/C++集成开发环境,它是基于MinGW/GCC的,拥有强大的代码编辑和编译功能,可以帮助开发者快速开发出高质量的软件。但是,有时候在开发过程可能会遇到一些问题,例如在使用Dev C的时候,会出现无法输入scanf函数的情况,接下来,我们就来看一下该问题的解决方法。 首先,需要明确的是,scanf函数是C语言最常用的输入函数之一,它可以接收用户输入的数据,并将数据存储到指定的变量。因此,如果在Dev C出现无法输入scanf函数的情况,那么问题可能出现在以下几个方面: 1.代码有语法错误或逻辑错误,导致程序无法正常运行。 2.编译器或运行环境出现了问题,导致程序无法正常运行。 3.系统出现了异常,例如内存不足、资源冲突等。 针对这些情况,我们可以采取以下方法来解决无法输入scanf函数的问题: 1.检查代码是否存在语法错误或逻辑错误,对代码进行逐行调试,找出具体出错的代码段,并进行修正。 2.检查Dev C的编译器或运行环境是否出现了异常,例如更新编译器版本、重新安装Dev C等。 3.检查系统资源是否充足,例如释放内存、关闭其他程序等,以确保程序正常运行。 除此之外,还有一些小技巧可以帮助我们更好地解决该问题,例如: 1.使用fflush函数清空缓冲区,以确保scanf函数可以正常读取输入内容。 2.在scanf函数使用空格或换行符等特殊字符,以便读取输入内容。 总之,无论出现什么问题,我们都应该保持耐心和冷静,仔细分析并尝试解决问题。只有通过不断的实践和经验积累,才能成为一个优秀的程序员,掌握更多的开发技巧和方法。 ### 回答3: 在使用Dev C开发C语言程序时,如果scanf函数无法进行输入,一般会出现以下几种情况: 1. 输入格式不正确:scanf函数需要根据指定的格式来输入数据,如果输入格式不正确,就会导致无法输入。需要检查scanf语句的格式是否正确,是否与要输入的数据类型匹配。 2. 缓冲区没有清空:如果在使用scanf函数前曾经使用过其他输入函数,如getsscanf等,那么缓冲区可能还存在残留的字符,导致scanf函数无法进行输入。需要在scanf函数调用前,使用fflush函数清空缓冲区及输入信号。 3. 缓冲区溢出:如果输入数据的长度超过了变量定义的长度,也会导致scanf函数无法输入。需要检查所需输入的数据类型及存储变量,是否与其类型匹配,是否定义够所需输入的数据长度。 4. 输入错误:在程序运行时,如果输入的数据错误,如输入了非数字字符等,则会导致scanf函数无法进行输入。需要检查数据的输入是否正确,是否符合所输入数据类型的要求。 5. 处理字符串时要注意输入格式化:输入字符串时必须要注意字符数组后面一个元素存放的一定是'\0',此时若输入字符串的字符数超过了字符数组长度,便会越界,产生致命错误。 以上是Dev C调试scanf无法输入的几种情况,需要根据具体情况进行检查及调整,保证程序运行时scanf函数能够正常进行输入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cyt涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值