我的问题是我不知道如何将int值转换为char数组char* m_value
。我尝试使用itoa但它不起作用。 itoa(m_val, m_wartosc, 10);
也许还有其他功能可以做到这一点?
Main.cpp的
int main(int argc, char *argv[])
{
LargeNumber l1;
LargeNumber l3(172839); //how to convert this int to char*
return 0;
}
LargeNumber.h
class LargeNumber{
public:
LargeNumber()
{
m_array = "0"; //zero for no arg.
}
LargeNumber(int val):m_val(val)
{
itoa(m_val, m_array, 10); //doesn't work
//sprintf(m_array, "%d", m_val);
}
LargeNumber(const LargeNumber& p):m_array(p.m_array)
{ } //copy constructor
~LargeNumber(){
delete []m_array; //for object with new
}
public: //should be private
int m_val;
char* m_array;
};
答案 0 :(得分:5)
简单的答案是:不要。有两个原因:
但是如果你真的必须以这种方式存储它,你将需要分配相关的内存量,使用snprintf
进行转换(itoa
是一个非标准函数),并记住免费在正确的时间记忆(你 >阅读并理解Rule of Three)。
我强烈建议使用std::string
而不是原始C风格的数组,因为它至少会处理自己的内存管理,然后您就可以使用{{1}填充它}。
答案 1 :(得分:0)
itoa()
的第二个参数需要是内存中足以存储以null结尾的字符串的数组。一个例子:
int number = 172839;
char buffer[10];
itoa(number,buffer,10);
答案 2 :(得分:0)
LargeNumber(int val):m_val(val)
{
std::stringstream stream;
stream << val;
m_array = new char[stream.str().size()];
strcpy(m_array, stream.str().c_str());
}
答案 3 :(得分:0)
您必须首先使用
分配数组m_array = new char[20]
在调用iota之前在构造函数中。 iota不会分配内存。