C++ itoa是否删除字符?

C++ itoa是否删除字符?,c++,char,delete-operator,itoa,C++,Char,Delete Operator,Itoa,为什么这会给我一个记忆错误 char* aVar= new char; itoa(2, aVar, 10); delete aVar; itoa是否删除aVar?如何知道C++函数是否删除指针,是否有一个约定?< /P> 如果我这样做,则不会发生错误: char* aVar= new char; delete aVar; itoa需要足够长的数组来容纳整个值加上结尾的空字符。 在您的情况下,您需要分配至少2个字符,否则末尾的空字符将落在未分配的内存上 看 对于纯C,sprintf应该是一个更

为什么这会给我一个记忆错误

char* aVar= new char;
itoa(2, aVar, 10);
delete aVar;
itoa
是否删除
aVar
?如何知道C++函数是否删除指针,是否有一个约定?< /P> 如果我这样做,则不会发生错误:

char* aVar= new char;
delete aVar;

itoa
需要足够长的数组来容纳整个值加上结尾的空字符。 在您的情况下,您需要分配至少2个字符,否则末尾的空字符将落在未分配的内存上

对于纯C,
sprintf
应该是一个更具可移植性的解决方案:

char aVar[2];
sprintf(aVar, "%d", 2);
(根据文件规定,itoa并非普遍可用)


如果你使用C++,最好的方法是使用StrueFipe。请参阅此问题:以了解讨论。

itoa
需要足够长的数组来容纳整个值和结尾的空字符。 在您的情况下,您需要分配至少2个字符,否则末尾的空字符将落在未分配的内存上

对于纯C,
sprintf
应该是一个更具可移植性的解决方案:

char aVar[2];
sprintf(aVar, "%d", 2);
(根据文件规定,itoa并非普遍可用)


如果你使用C++,最好的方法是使用StrueFipe。请参阅此问题:了解讨论。

char*aVar=new char[2];伊托亚(2,阿瓦尔,10);删除[]aVar但这是丑陋的代码。您应该避免手动内存管理和对固定大小字符串进行操作的函数;伊托亚(2,阿瓦尔,10)代码> STD::StrugSturfs/Cuffice >仅为C++。考虑到问题是用C标记的,您应该推荐
sprintf
,而不是
std::stringstream
。编辑:但刚刚意识到OP正在代码中使用
new
。。。重新标记。@Vlad我只是在复制OP使用的代码模式。当然你可以将数组放在堆栈上。
char*aVar=new char[2];伊托亚(2,阿瓦尔,10);删除[]aVar但这是丑陋的代码。您应该避免手动内存管理和对固定大小字符串进行操作的函数;伊托亚(2,阿瓦尔,10)代码> STD::StrugSturfs/Cuffice >仅为C++。考虑到问题是用C标记的,您应该推荐
sprintf
,而不是
std::stringstream
。编辑:但刚刚意识到OP正在代码中使用
new
。。。重新标记。@Vlad我只是在复制OP使用的代码模式。当然,你可以将数组放在堆栈上。
new
不是c中的运算符。因此,我把问题推迟到C++。你说得对,我将把它改成C++ <代码>新< /Cord>不是C中的运算符。因此我把问题推迟到C++。你说得对,我会把它改成C++。