C++中,使用cstring 中 strcat 函数实现字符串拼接,报错:
error C4996: 'strcat': This function or variable may be unsafe.
Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
代码:
#include<iostream>
#include<cstring>
using namespace std;
char first_name[20]{ 0 };
char last_name[10]{ 0 };
cout << "What is your first name?" << endl;
cin.getline(first_name, 20);
cout << "What is your last name?" << endl;
cin.getline(last_name, 10);
// 使用 cstring 中的函数 strcat 拼接字符串
char result[50]{ 0 };
strcat(result, last_name);
strcat(result, ",");
strcat(result, " ");
strcat(result, first_name);
cout << result << endl;
说明:strcat
函数不安全,已弃用
char * strcat ( char * destination, const char * source );
- 参数destination:指向目标数组的指针
- 参数source :要追加的字符串指针
因为再程序动态运行时,程序无法确定 destination 是否足够大,能够满足追加其他字符串,如果不满足,就会出现缓冲区溢出,有可能将目标字符串的数据覆盖掉,这种情况是神危险的。
解决方法:
- 禁用弃用:解决方案→右键→属性→配置属性→C/C++→预处理器→配置_CRT_SECURE_NO_WARNINGS
- 改用微软提供的
strcat_s
函数,但是该函数不支持跨平台
char first_name[20]{ 0 };
char last_name[10]{ 0 };
cout << "What is your first name?" << endl;
cin.getline(first_name, 20);
cout << "What is your last name?" << endl;
cin.getline(last_name, 10);
// 使用 cstring 中的函数 strcat 拼接字符串
char result[50]{ 0 };
strcat_s(result, last_name);
strcat_s(result, ",");
strcat_s(result, " ");
strcat_s(result, first_name);
cout << result << endl;