Почему мой код выдает ошибку C6386 при попытке скопировать массив символов? - PullRequest
0 голосов
/ 13 января 2020

Я получаю предупреждение C ++ C6386 по следующему коду:

int m_wordNumber = getRandomNumber();
//get word size
size_t m_wordSize = strlen(m_wordsArray[m_wordNumber]);
//create word arrays
char* m_chosenWord = new char[m_wordSize];
char* m_blankArray = new char[m_wordSize];

int m_incorrectGuessCounter = 0;

generateArray(m_blankArray, m_wordSize);
//copy word to new array
strcpy_s(m_chosenWord, m_wordSize + 1, m_wordsArray[m_wordNumber]);
//create temp array and output word
char * m_tempWordHolder = nullptr;
std::cout << m_chosenWord << std::endl;

Строка, которая выдает предупреждение, это строка strcpy_s, все, что она пытается сделать, это скопировать строку из массива символов в другой массив символов.

Любая помощь будет принята с благодарностью, спасибо.

предупреждение выглядит следующим образом:

Предупреждение C6386 Переполнение буфера при записи в 'm_chosenWord ': размер записи составляет m_wordSize * 1' байтов, но можно записать 7 байтов

1 Ответ

4 голосов
/ 13 января 2020

Когда вы выделяете m_chosenWord, вы выделяете m_wordSize символов. Однако в

strcpy_s(m_chosenWord, m_wordSize + 1, m_wordsArray[m_wordNumber]);

Вы пишете m_wordSize + 1 символов. В начальном распределении вы также хотите добавить +1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...