考虑:
void takeInput()
{
string word;
cin >> word;
int n = word.length();
// Declaring character array
char *char_array = new char [n + 1];
// Copying the contents of the
// string to char array
strcpy(char_array, word.c_str());
for (int i = 0; i<n; i++)
cout << char_array[i];
}
错误:严重性代码描述项目文件行抑制状态 错误C4996&#39; strcpy&#39;:此函数或变量可能不安全。 请考虑使用strcpy_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。详细信息请参见在线帮助。 DSPROJECT c:\ users \ hp \ source \ repos \ dsproject \ dsproject \ source.cpp 49
答案 0 :(得分:1)
严格来说,这不是一个错误,它是一个被视为错误的警告。错误消息中解释了警告的原因:strcpy
不安全,因为它可能超出目标字符串的限制。
该消息提出了两种解决方法 - (1)使用strcpy_s
,或(2)关闭警告(不推荐)。
C ++有另一种方法可以解决编译错误 - 使用标准C ++库中的std::copy
function,然后使结束为空终止:
char *char_array = new char [n + 1];
std::copy(word.begin(), word.end(), char_array);
char_array[n] = '\0';
答案 1 :(得分:1)
而非strcpy
您可以使用strncpy
:
strncpy(char_array, word.c_str(), n + 1);
这个n+1
确保也会复制终止'\0'
,以及你已经足够大的内存缓冲区。
或者,在使用strcpy之前,您可以在定义_CRT_SECURE_NO_WARNINGS时禁用此警告(当然强烈建议不要这样做):
#define _CRT_SECURE_NO_WARNINGS