初学c语言,在学习 用scanf函数输入数据时写了点代码(上图所示),调试过程中未报错,but运行后却出现如上问题,原因如下在于未能正确理解scanf于scanf_s的区别。
scanf_s()用于读取字XIU符串时,必须提供一个数字以表明最多读取多少位字符,以防止溢出。
在scanf_s中指定最多读取多少位字符后运行成功!
当时用scanf_s输入数组、字符、字符串时必须添加第三个参数,用来表示缓冲区的大小,表示最多读取n-1个字符(整数、浮点数等不需要最后一位)。
scanf于scanf_s的区别:
scanf() 函数 :
scanf() 函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:scanf("<格式化字符串>",<地址表>)。
scanf_s()函数:
scanf_s() 的功能虽然与scanf() 相同,但却比 scanf() 安全,因为 scanf_s() 是针对“ scanf()在读取字符串时不检查边界,可能会造成内存泄露”这个问题设计的。
scanf_s()用于读取字符串时,必须提供一个数字以表明最多读取多少位字符,以防止溢出。