我在以下代码上收到 C6386 的 C++ 警告:
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"字节
分配m_chosenWord
时,分配m_wordSize
字符。然而,在
strcpy_s(m_chosenWord, m_wordSize + 1, m_wordsArray[m_wordNumber]);
你正在写m_wordSize + 1
字符。在初始分配中,您还希望添加+1
。