【发布时间】:2020-01-14 03:01:58
【问题描述】:
我在以下代码中收到 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”字节
【问题讨论】:
-
什么是 C6386 ?请在问题中包含错误消息。错误代码是编译器特定的,错误本身不是。不是每个人都使用视觉工作室
-
是警告还是错误?请提供minimal reproducible example 和错误信息
-
有什么理由不使用
std::string? -
char m_chosenWord = new char[m_wordSize]; 你没有为空终止符留出空间
-
重要提示:
strlen不计算空终止符。您基于m_wordSize创建的数组将是一个字符太短。