itoa 在 C++ 中创建无限循环

发布于 2024-12-11 15:44:24 字数 503 浏览 0 评论 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)作为编译器。

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

This is very strange. itoa(); seems to create an infinite loop.

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

Why on earth does it do that? I've tried using different variables than i, numerical values without variables (i.e. itoa(1, buffer, 10);), it still keeps ending up in an infinite loop.
I've tried to google without much success, I found an old mail about it here.
I am using Windows XP 32 bit and Code::Blocks (with GCC) as a compiler.

Does anyone know what's wrong? Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

2024-12-18 15:44:24

itoa 以 null 终止它生成的字符串,但您尚未将 buffer 设置得足够大以容纳终止 NUL 字符。尝试:

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

itoa null-terminates the string it produces, but you haven't made buffer large enough to hold the terminating NUL character. Try:

for (int i = 0; i < 10; i++)
{
    char buffer[2];
    itoa(i, buffer, 10);
    std::cout << buffer;
}
木森分化 2024-12-18 15:44:24

你到底为什么要使用通用的单位数字转换例程?

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

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

Why on earth are you using a general number conversion routine for single digits?

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

(You need the cast back to char so that the compiler uses the correct overload of <<. The C++ standard guarantees that the character constants '0' through '9' have consecutive numeric values.)

远山浅 2024-12-18 15:44:24

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

Your buffer is too small -- itoa will write a null-terminated string, so your buffer will need at a minimum 2 bytes to hold values from 0-9.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文