问题
1、vs2019环境下编写c中scanf()提示安全性问题
2、scanf_s()函数的报错
提示安全性问题:error C4996:‘scanf’:This function or variable may be unsafe.
char a;
scanf("%c",&a);
解决方法:
1.对编译器环境进行设置。
在预处理器定义中添加 _CRT_SECURE_NO_DEPRECATE
2.改用scanf_s()
在vs2005之后的版本,微软定义scanf_s()代替scanf(),避免出现内存泄漏的问题。
在使用%c和%s读入字符或字符串时,应在地址参数后附加一个缓冲区边界值。
scanf_s()报错问题:
char a[22];
scanf_s("%s",&a);
报错:没有为格式字符串传递足够的参数
scanf()出于安全性考虑 在使用%c或%s读入单个字符或者字符串时,应在地址参数后附加一个缓冲区边界值。如:
注:缓冲区:scanf_s()函数从缓冲区读入一个数据项,该数据项在缓冲区就会被清除。scanf函数在接收到响应的数据之前,一直等待用户输入,直到接收到数据项,在缓冲区中清除该数据,scanf函数返回,程序继续执行。
scanf_s("%s",&a,10);
或者:
char a;
scanf_s("%c",&a,sizeof(a));
以上为个人学习理解。欢迎指正。