我有这个代码,
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/