作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个代码,
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/
我是一名优秀的程序员,十分优秀!