关于Visual Studio编程时出现 “0xFEFEFEFE 处有未经处理的异常(在 查找学生信息.exe 中): 0xC00001A5: 检测到无效的异常处理程序例程。“解决方案

异常说明: 今天在编程时遇到一个小错误就是用scanf_s输入字符串时程序出现异常0xFEFEFEFE 处有未经处理的异常(在 查找学生信息.exe 中):  0xC00001A5: 检测到无效的异常处理程序例程。 (参数:  0x00000003)。如下图所示:

                           

解决方法:

     首先了解scanf_s() 和scanf()的区别。教材里用的scanf(),其实在目前Visual Studio版本中已经弃用了,用scanf_s()函数代替了.
scanf() 函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。其调用格式为:scanf("<格式化字符串>",<地址表>)。
scanf_s() 的功能虽然与scanf() 相同,但却比 scanf() 安全,因为 scanf_s() 是针对“ scanf()在读取字符串时不检查边界,可能会造成内存泄露”这个问题设计的。scanf_s()用于读取字符串时,必须提供一个数字以表明最多读取多少位字符,以防止溢出。

     下面用一个简单案例说明:

      (1)出现异常的程序如图:

               

       (2)消除异常的两种方法

               ①在程序开始时加入一句宏定义:#define _CRT_SECURE_NO_WARNINGS 。  然后将scanf_s改为scanf且printf_s                 改为printf。如下图所示,

                                                 

                ②在scanf_s中给字符串变量后加上原有长度。例如本例中将scanf_s("%s",name)改为scanf_s("%s",name,10) 。程序               如下图所示,

                                            

       Tips:scanf函数或scanf_s函数中输入项如果受字符数组名,不再加地址符&,因为在c语言中数组名代表该数组的起始地址。

猜你喜欢

转载自blog.csdn.net/weixin_42070473/article/details/104553129