尝试反转char数组时出错

时间:2010-05-26 15:20:11

标签: c

我正在努力改善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!

5 个答案:

答案 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位数字。