Итоа создает бесконечный цикл в C ++ - PullRequest
0 голосов
/ 26 октября 2011

Это очень странно.itoa();, кажется, создает бесконечный цикл.

for(int i = 0; i < 10; i++)
{
        char buffer[1];
        itoa(i, buffer, 10);
        std::cout << buffer;
}

С какой стати это происходит?Я пытался использовать переменные, отличные от i, числовые значения без переменных (то есть itoa(1, buffer, 10);), они все еще продолжают заканчиваться бесконечным циклом.Я пытался гуглить без особого успеха, я нашел старую почту об этом здесь .Я использую 32-битную Windows XP и Code :: Blocks (с GCC) в качестве компилятора.

Кто-нибудь знает, что не так?Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 26 октября 2011

itoa заканчивает нулем строку, которую он производит, но вы не сделали buffer достаточно большим, чтобы содержать завершающий символ NUL.Попробуйте:

for (int i = 0; i < 10; i++)
{
    char buffer[2];
    itoa(i, buffer, 10);
    std::cout << buffer;
}
1 голос
/ 26 октября 2011

С какой стати вы используете обычную процедуру преобразования чисел для однозначных чисел?

for (int i = 0; i < 10; i++)
    std::cout << char('0' + i);

(Необходимо преобразование обратно к char, чтобы компилятор использовал корректную перегрузку <<. Стандарт C ++ гарантирует, что символьные константы от '0' до '9' имеют последовательные числовые значения.)

0 голосов
/ 26 октября 2011

Ваш буфер слишком мал - itoa запишет строку с нулевым символом в конце, поэтому вашему буферу потребуется минимум 2 байта для хранения значений от 0 до 9.

...