我正在努力改善C ++(我知道一点)。我正在研究字符数组。我找到了一个练习,其目标是反转一个字符数组(在我从一个整数转换后)。我收到以下错误(使用VS2005):
运行时检查失败#2 - 变量'revBuffer'周围的堆栈已损坏。
当我单步执行代码时,我会注意到以下内容:
revBuffer = 0x0012fe40“100899ÌÌ”,“998001”
相关代码如下。
char buffer[5];
char revBuffer[5];
int i;
int j=5;
long number = 998001;
itoa(number, buffer, 10);
for(i=0; i<strlen(buffer);i++)
{
revBuffer[j] = buffer[i];
j--;
}
任何帮助都会很棒。 TIA!
答案 0 :(得分:7)
你正在对revBuffer进行过度索引。它的大小为5,这意味着你可以将它从0到4编入索引,但你在循环中使用的第一个索引是5。
答案 1 :(得分:6)
您要转换的数字有六位数 - 您使用的缓冲区仅足以容纳4加上一个空终止符。使缓冲区更大。
答案 2 :(得分:2)
虽然你的运动很有帮助,但你应该记住:
std::reverse(buffer, buffer + 5);
答案 3 :(得分:2)
除了其他人所说的内容之外,即使在修复了所有索引问题之后,似乎也没有将null终止符放在revBuffer的最后一个字符中。您需要确保
revBuffer[strlen(buffer)] = '\0';
这也有问题,因为它假定缓冲区已正确终止:)
答案 4 :(得分:0)
首先,您尝试使用长度为5个字符的缓冲区来存储6位数字。