itoa在C ++中创建了一个无限循环

时间:2011-10-25 21:49:21

标签: c++ loops infinite-loop itoa

这很奇怪。 itoa();似乎创造了一个无限循环。

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

为什么它会这样做?我尝试过使用与i不同的变量,没有变量的数值(即itoa(1, buffer, 10);),它仍然会在无限循环中结束。 我试图谷歌没有太大的成功,我发现了一个关于它的旧邮件here。 我使用Windows XP 32位和Code :: Blocks(使用GCC)作为编译器。

有谁知道什么是错的?提前谢谢。

3 个答案:

答案 0 :(得分:5)

itoa null - 终止它生成的字符串,但是你没有使buffer足够大以容纳终止NUL字符。尝试:

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

答案 1 :(得分:1)

为什么你在使用一般数字转换例程进行单个数字?

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

(您需要转换回char,以便编译器使用<<的正确重载.C ++标准保证字符常量'0''9'具有连续数值。)

答案 2 :(得分:0)

你的缓冲区太小 - itoa会写一个以空字符结尾的字符串,所以你的缓冲区至少需要2个字节来保存0-9的值。