所以简单说说这个问题。 报错原因 scanf会存在溢出问题。如 即scanf在输入是不会考虑目标空间是否够大,而是把所有用户输入的值全部存到目标空间中去,这就会导致数据溢出非法访问的问题。 而当换成scanf_s后虽然代码依旧无法运行,不过并不会出现此类错误。同时,scanf_s函数在对数组进行输入时还会要求传参时将数组元素...
这是因为C++不支持VLA,MSVC在编译C程序时会拒绝这种与C++标准不一致的C语言特性。
unsafe
你的代码写的是str,2. 此时只能输入1个字符。你输入了"as"2个字符,已经把str,2撑爆了。你的scanf_s的运行结果,返回值一定是0,扫描失败了!!扫描失败了str里面就是随机值,[0]一般是0,你打印的话就什么都没有显示了。你如果想输入as,那个scanf_s的参数必须是至少3,才对,scanf_s返回值...
其他答案说的很明白了,不加_s的函数不安全,所以微软认为不好,所以vs里默认就强制不让用了.那么,我...
所有变量都有生存周期和作用域,变量的监视只能在生存周期和作用域内查看,因为一旦程序离开了当前的作用域或者生存周期,通常会将变量压入栈中或者抛弃,这时编译器无法访问。如果你想在一个更大的域访问一个指定变量,可以把它先申请成全局变量,等到调试无误结束后再把它恢复到局部变量中。通常做法是将局部变量映射...
在用VS2015进行C语言编程时,写输入函数不能写成scanf,而要写成scanf_s ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节。1 2 char buf[5]={'\0'};scanf("%s", buf);如果输入1234567890,后面的部分会被 ...
在用VS2015进行C语言编程时,写输入函数不能写成scanf,而要写成scanf_s ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节。1 2 char buf[5]={'\0'};scanf("%s", buf);如果输入1234567890,后面的部分会被 ...
1、VS版本过旧,会导致无法正常编译,可以在系统内添加VS的构建器,或者升级文件来解决这个问题。 2、编译器出现问题,也会导致无法编译,可以重新安装或更新编译器即可。 有一些区别,但是只要稍微改一下就行了.你具体问题要具体分析,代码要贴出来.VS2015是可以用scanf()和printf()的,编译也能通过,只不过安全性不如...
这个提示一般出现于VS里面,但是不代表不安全。按照我的理解可能是后边这个函数不需要显示的关闭文件描述符。 c语言 为什么fopen函数被认为不安全,要用fopen_s替代? 有一些区别,但是只要稍微改一下就行了.你具体问题要具体分析,代码要贴出来.VS2015是可以用scanf()和printf()的,编译也能通过,只不过安全性不如MS加...