admin 管理员组

文章数量: 1132277

#include <iostream>
#include <string.h>

...

char src[40] = "This is the source string";
char dest[40];

strcpy(dest, src);

printf("源字符串: %s\n", src);
printf("目标字符串: %s\n", dest);
  • 在 C++ 开发中,执行上述代码,报如下错误
C4996
'strcpy': This function or variable may be unsafe. 
Consider using strcpy_s instead. 
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 
See online help for details.	
# 翻译

'strcpy': 此函数或变量可能不安全
请考虑改用 strcpy_s
若要禁用此弃用警告,请使用 _CRT_SECURE_NO_WARNINGS
查看在线帮助以获取详细信息
问题原因
  • strcpy() 函数被标记为不安全,编译器建议使用更安全的替代函数 strcpy_s()
  1. strcpy() 函数
char* strcpy(char* dest, const char* src);
参数类型说明
destchar*目标缓冲区指针,用于存储复制后的字符串的内存地址
srcconst char*源字符串指针,要复制的字符串的地址
  1. strcpy_s() 函数
errno_t strcpy_s(char *dest, rsize_t dest_size, const char *src);
参数类型说明
destchar*目标缓冲区指针,用于存储复制后的字符串的内存地址
dest_sizersize_t目标缓冲区大小
srcconst char*源字符串指针,要复制的字符串的地址
处理策略
  1. 推荐使用更安全的 strcpy_s() 函数
#include <iostream>
#include <string.h>

...

char src[40] = "This is the source string";
char dest[40];

strcpy_s(dest, sizeof(dest), src);

printf("源字符串: %s\n", src);
printf("目标字符串: %s\n", dest);
  1. 通过 #define _CRT_SECURE_NO_WARNINGS 禁用警告
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string.h>

...

char src[40] = "This is the source string";
char dest[40];

strcpy(dest, src);

printf("源字符串: %s\n", src);
printf("目标字符串: %s\n", dest);

本文标签: function strcpy variable strcpys unsafe