Преобразовать строку в массив символов, но strcpy () выдает ошибку - PullRequest
0 голосов
/ 05 мая 2018

Рассмотрим:

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 'strcpy': эта функция или переменная может быть небезопасной. Попробуйте вместо этого использовать strcpy_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Смотрите справку для деталей. DSPROJECT c: \ users \ hp \ source \ repos \ dsproject \ dsproject \ source.cpp 49

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

вместо strcpy вы можете использовать strncpy:

strncpy(char_array, word.c_str(), n + 1);

Это n+1 гарантирует, что завершающий '\0' также будет скопирован, а буфер памяти у вас уже достаточно большой.

Или вы можете отключить это предупреждение (что, конечно, настоятельно НЕ рекомендуется) с определением _CRT_SECURE_NO_WARNINGS перед использованием strcpy i.e.:

#define _CRT_SECURE_NO_WARNINGS
0 голосов
/ 05 мая 2018

Строго говоря, это не ошибка, это предупреждение, которое считается ошибкой. Причина предупреждения объясняется в сообщении об ошибке: strcpy небезопасно, поскольку оно может выйти за пределы строки назначения.

В сообщении предлагаются два способа решения этой проблемы - (1) использование strcpy_s или (2) отключение предупреждения (не рекомендуется).

В C ++ есть другой подход, который исправит ошибку компиляции - используя std::copy функцию из стандартной библиотеки C ++, затем результат завершается нулем:

char *char_array = new char [n + 1];
std::copy(word.begin(), word.end(), char_array);
char_array[n] = '\0';
...