将字符串转换为字符数组,但strcpy()给出错误

时间:2018-05-05 11:10:15

标签: c++ string char strcpy

考虑:

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

2 个答案:

答案 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