0

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

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

它到底为什么要这样做?我试过使用不同的变量i,没有变量的数值(即itoa(1, buffer, 10);),它仍然会一直以无限循环结束。我试过用谷歌搜索但没有成功,我在这里找到了一封关于它的旧邮件。我正在使用 Windows XP 32 位和 Code::Blocks(带有 GCC)作为编译器。

有谁知道出了什么问题?提前致谢。

4

3 回答 3

5

itoa空终止它产生的字符串,但你没有buffer足够大来容纳终止 NUL 字符。尝试:

for (int i = 0; i < 10; i++)
{
    char buffer[2];
    itoa(i, buffer, 10);
    std::cout << buffer;
}
于 2011-10-25T21:51:18.120 回答
1

你到底为什么要对个位数使用通用的数字转换程序?

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

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

于 2011-10-25T22:30:43.650 回答
0

您的缓冲区太小 - itoa 将写入一个以 null 结尾的字符串,因此您的缓冲区至少需要 2 个字节来保存 0-9 的值。

于 2011-10-25T21:52:23.620 回答