<p style="margin-bottom: 3px;font-size: 18px;font-weight: bold">本文目录一览:</p><ul><li style='margin-bottom: 3px;list-style: none'>
讯享网
1、VS2010里编C程序不能用scanf()吗?
可以用。
scanf的声明在VS中被认为是不安全的,让用户使用scanf_s来代替,只要在#include stdio.h前面添加:
#define _CRT_SECURE_NO_DEPRECATE
或者 scanf函数修改为scanf_s即可。
扩展资料:
scanf函数原型
int scanf(const char * restrict format,…);
函数 scanf() 是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。
参考资料来源:百度百科-scanf (计算机语言函数)

1、使用区别
scanf()不会检查输入边界,可能造成数据溢出。
scanf_s()会进行边界检查。
2、意思
scanf表示从键盘输入指定格式的数据。如:scanf(“%d”,x);指从键盘给x输入一个int型(整型)数据;scanf(”%f”,x);指从键盘给x输入一个float型(实型)数据;
对应的输出为:printf 按照指定的格式输出数据;如printf(“%d”,x); 指按整型数据输出X中的值。
因为带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系统。
3、scanf_s()参数与scanf()不同

例如scanf(“%s”,name,n),整形n为name类型的大小,如果name是数组,那n就是该数组的大小。
scanf函数的原型如下:
int scanf(const char * restrict format,…);
scanf的为什么返回值被忽略的原因是你的代码中没有使用scanf的返回值。
最简答的解决方案是强制忽略返回值:
(void) scanf(“%d”, m);
另外一种方法是定义一个临时变量接收scanf函数的返回值。
int ret = scanf(“%d”, m);
这个编译器还有一个错误,它建议你不要用scanf,而是改为用scanf_s。
用scanf_s是微软自己的规范,不是C语言规范。如果在vs2019使用scanf。
就在程序最前面加一行:#define_CRT_SECURE_NO_DEPRECATE
这是警告,不是错误。可以忽略。
scanf不检查边界,这是scanf自身的特性。 这个警告是说为了增加安全性,可以用scanf_s来代替。但是scanf_s不是ansi C函数,写出的代码失去了良好的可移植性,不建议使用。如果只是练习,这些都不需要考虑,用scanf即可。
也可以看看这个回答:
你使用的Scanf应该小写
你使用scanf在VS2013下是非线程安全函数,不能使用,需要修改安全属性
你应该是用安全的scanf_s替换scanf
如果一定要使用scanf,那么在项目属性页面,添加_CRT_SECURE_NO_WARNINGS宏
讯享网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/167538.html