CRT中的安全功能

CRT

学习于微软

新版本CRT函数具有_s(“安全”)的后缀。

例如, strcpy 函数无法验证调用字符串复制它是否超过它目标缓冲区。 但其安全副本, strcpy_s,采用缓冲区的大小作为参数,因此,它可以确定缓冲区是否溢出。

带有安全功能同样不能阻止发生安全错误, 如果使用 strcpy_s 复制为一个字符为十六进制字符缓冲区,这是在部分的错误; strcpy_s 不能更正此错误,但带有安全功能会执行进一步的检查错误状态,可以检测该错误并将调用无效参数处理程序通知您。

如果不想带有_s,可以定义 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 为 1 消除该警告调用 strcpy_s,避免缓冲区溢出。

应用举例:

#define SIZE 26
char buf[SIZE];
errno_t err;
tm gmtm;
/*
char *asctime( 
   const struct tm *timeptr 
);
*/
asctime(&gmtm);
/*
errno_t asctime_s( 
   char* buffer,
   size_t numberOfElements,
   const struct tm *_tm 
);
*/
err=asctime(buf,SIZE,&gmtm);

zhengbanxian
3.12

猜你喜欢

转载自blog.csdn.net/weixin_42785489/article/details/88418933