因为课题需要c++编程,所以把相关知识记录一下,以备学习。
1.Sprint 与 sprintf_s 的关系
Sprint 与 sprintf_s都是数字转换字符串的函数,sprintf_s是sprintf的安全版本,微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。
两者主要差在sprintf_s 第二个参数,可以控制缓冲区大小,来避免sprintf()存在的溢出风险。
2.Sprint 与 sprintf_s 参数说明
sprint | sprintf_s |
---|---|
int sprintf ( char *buffer, const char *format, [ argument] … ); | int sprint_s( char *buffer, size_t sizeOfBuffer, const char *format, [ argument] … ); |
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]…:可选参数,可以是任何类型的数据。
sizeOfBuffer:缓冲区大小。
例子
#include<stdio.h>
#include<iostream>
int main(int argc, char *avgv[])
{
int a = 566;
char str[256];
sprintf_s(str, 256, "%d", a);
printf(str, "test",a);
system("pause");
return 0;
}
运行结果
3. 问题
在使用Sprint时,VS2015 报错:warning C4996: ‘sprintf’: This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
防止报错方法:
VS2015的版本:
打开项目----项目属性—配置属性----C/C++ ----预处理器----预处理定义,
添加 _CRT_SECURE_NO_DEPRECATE 和 _SCL_SECURE_NO_DEPRECATE 这两个宏。
4.参考
- https://www.cnblogs.com/douzi2/p/3974959.html
- https://blog.youkuaiyun.com/qq_37221466/article/details/81140901