Ошибка при попытке обратить массив символов - PullRequest
2 голосов
/ 26 мая 2010

Я пытаюсь стать лучше в 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--;
    }

Любая помощь будет великолепна. ТИА!

Ответы [ 5 ]

7 голосов
/ 26 мая 2010

Вы переиндексировали revBuffer.Это размер 5, что означает, что вы можете индексировать его от 0 до 4, но первый индекс, который вы используете в этом цикле, равен 5.

6 голосов
/ 26 мая 2010

Число, которое вы конвертируете, имеет шесть цифр - используемый вами буфер достаточно велик, чтобы вместить 4 плюс нулевой терминатор. Увеличьте буфер.

2 голосов
/ 26 мая 2010

В дополнение к тому, что сказали другие, не похоже, что нулевой терминатор будет помещен в последний символ revBuffer даже после того, как вы исправите все свои проблемы с индексацией. Вам нужно будет обязательно сделать

revBuffer[strlen(buffer)] = '\0';

Это также связано с проблемами, поскольку предполагает, что буфер правильно завершен:)

2 голосов
/ 26 мая 2010

Хотя ваше упражнение полезно, вы должны помнить, что также есть:

std::reverse(buffer, buffer + 5);
0 голосов
/ 26 мая 2010

Для начала вы пытаетесь использовать буфер длиной 5 символов для хранения 6-значного числа.

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