c++ - char a[0] 使用 itoa() 将整数转换为字符串的目的

标签 c++

我有这个代码,

char a[0];
cout << "What is a? " << a << endl;
char *word = itoa(123,a,10);
string yr = string(word);

但我无法理解数组 a[0]。我试图改变它的值,看看是否有任何变化,但它似乎没有任何区别。

例如,即使将 a[0] 更改为 a[1] 或任何其他整数,输出仍然没有区别

char a[1];
cout << "What is a? " << a << endl;
char *word = itoa(123,a,10);
string yr = string(word);

这里的目的是什么?

最佳答案

itoa function is non-standard ,这是对流行签名 itoa(int, char*, int) 的讨论。

第二个参数表示一个缓冲区,表示值的以 null 结尾的字符串被复制到该缓冲区中。它必须为整个字符串提供足够的空间:在您的例子中,即 "123",它需要四个字符。您的代码将 a[] 作为缓冲区传递,但 a[] 的大小不足以容纳整个 "123" 字符串。因此,调用会导致 undefined behavior .

您需要使 a 足够大以适合目标字符串。传递大小为 12 的缓冲区足以容纳 itoa 在 32 位系统上可以生成的最长十进制数(即 -2147483648)。将声明中的 char a[0] 替换为 char a[12]

关于c++ - char a[0] 使用 itoa() 将整数转换为字符串的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44945462/

相关文章:

用于固定大小和预定义类型数据的 C++ vector 、列表或数组

c++ - 命名空间问题

c++ - 重复字母和连续字母不相同的排列

c++ - 正则表达式多个浮点

c++ - 从 map vector 中删除元素

c++ - 管道到/从 Ada 程序到 C++ 程序

c++ - Makefile 无法找到 *.o 文件来生成 .exe

c++ - 如何确保作为模板参数传递的函数类型不修改参数?

c++ - opengl中如何用鼠标点击获取帧缓冲区中绘制图形的像素信息

c++ - 当我尝试删除不存在的值时,为什么删除操作会出现段错误?