itoa 在 C++ 中创建无限循环
这很奇怪。 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
itoa
以 null 终止它生成的字符串,但您尚未将buffer
设置得足够大以容纳终止 NUL 字符。尝试:itoa
null-terminates the string it produces, but you haven't madebuffer
large enough to hold the terminating NUL character. Try:你到底为什么要使用通用的单位数字转换例程?
(您需要强制转换回
char
,以便编译器使用<<
的正确重载。C++ 标准保证字符常量'0'
到'9'
具有连续的数值。)Why on earth are you using a general number conversion routine for single digits?
(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.)您的缓冲区太小 - 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.