vs2019scanf和scan_s的区别
#include<stdio.h>int main(void)
{
int ASCII;
printf("Please enter a ASCII.\n");
scanf("%d",&ASCII);
printf("%d ASCII is related to %c",ASCII,ASCII);
return 0;
}
此代码在vs2019中报错
#include<stdio.h>
int main(void)
{
int ASCII;
printf("Please enter a ASCII.\n");
scanf_s("%d",&ASCII);
printf("%d ASCII is related to %c",ASCII,ASCII);
return 0;
}
改为scan_s即可运行,求助各位大神这两者的区别是什么?
刚学c的萌新
都可以的!是不是报C4996,那只是建议你使用 _s 的而已! 本帖最后由 昨非 于 2020-11-4 10:01 编辑
scnaf()在读取时不检查边界,可能会存在内存泄漏的问题,而scanf_s()在读取时检查边界是一种更加安全的函数
参考https://blog.csdn.net/fuyongsheng135/article/details/50996625?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160445474919724842964014%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160445474919724842964014&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-50996625.pc_first_rank_v2_rank_v28p&utm_term=scanf%E5%92%8Cscanf_s%E5%8C%BA%E5%88%AB&spm=1018.2118.3001.4449
vs2019里scanf会引起安全性问题
不过除了改成scanf_s以外,也可以在首行加上
#define _CRT_SECURE_NO_WARNINGS
来解决
满意的话请给个最佳 昨天朋友告诉我,设置一下VS2019即可,你试试
本帖最后由 jackz007 于 2020-11-4 10:53 编辑
scanf_s() 与 scanf() 在大部分情况下的用法完全一样,唯一不同的地方,就是在输入字符串的时候,需要同时给定一个整型数参数,告诉 scanf_s(),用于保存字符串的字符数组的实际容量,以防止存储空间的越界使用。
#include <stdio.h>
int main(void)
{
char s ;
printf("your name please : ") ;
scanf_s("%s" , s , 256) ;
printf("hello, %s, how are you ?\n") ;
}
就楼主的代码而言,使用 scanf_s() 与使用 scanf() 没有任何区别,只需要直接换函数名就可以了。
页:
[1]