C语言新手,请教各位大佬,谢谢啦
这是怎么回事?我写的scanf好像都有这个问题 它让你用scanf_s不开发少用VS scanf(“%lf%lf%lf”, &a, &b, &c); 把里面的逗号去掉,这样试试看 在文件开头加上 #define _CRT_SECURE_NO_WARNINGS vs中认为scanf_s更安全,其实可以用scanf的
另外,scanf引号中不要用逗号! 这是微软觉得scanf 不安全~要推销自家的产品了~ _s系列函数~
打个比方~你声明一个五个元素的字符数组~你用scanf接收往里面赋值~ 但是你输入了十七八个~
这时候会怎么样~ 这时候就会内存溢出~ 有可能你多输入的字符~就被写到不属于这个数组的内存里面去了~
这时候微软就摇旗大喊~ 我这有scanf_s!!!!!,你快来用~他为什么比scanf安全? 因为他多了一个参数~要求你输入欲读入的个数~
多了的~就被丢了~
其实在 c11标准中~ 就已经承认了scanf_s函数~ 但是。。。好像其他的编译器厂商并不买账,比如gcc~哈哈。。。
说了这么多废话~来说解决的办法,你以后可能还会遇到更多的 4996错误~ 比如strcpy微软也觉得不安全~
我的办法就是在你写预处理命令的位置~添加上:
#pragma waring(disable:4996) 风过无痕丶 发表于 2018-3-7 09:31
这是微软觉得scanf 不安全~要推销自家的产品了~ _s系列函数~
打个比方~你声明一个五个元素的字符数组~你 ...
谢谢啦,现在明白了,但是你的解决办法又是什么原理呢? zxy000 发表于 2018-3-7 12:32
谢谢啦,现在明白了,但是你的解决办法又是什么原理呢?
这不能说是我的解决办法~ 这是微软给出的给出的解决方案~
#pragma waring(disable:4996)
大致意思就是忽略 4996这项警告~
风过无痕丶 发表于 2018-3-7 12:37
这不能说是我的解决办法~ 这是微软给出的给出的解决方案~
大致意思就是忽略 4996这项警告~
是这样的么,还是不行唉 zxy000 发表于 2018-3-7 13:19
是这样的么,还是不行唉
写到include之前 风过无痕丶 发表于 2018-3-7 14:00
写到include之前
可以了,可以了,谢谢!那我把问题问完吧,为什么我和小甲鱼写的一样,可结果不对呢 在项目属性中,点开c/c++,找到预处理器,添加_CRT_SECURE_NO_WARNINGS
页:
[1]