如何将int转换为char *?

时间:2012-05-28 14:28:48

标签: c++ constructor char type-conversion

我的问题是我不知道如何将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;

};

4 个答案:

答案 0 :(得分:5)

简单的答案是:不要。有两个原因:

  • 从所有(错误的)其他答案中可以看出,内存管理很棘手且容易出错。
  • 我看不出如何将您的值存储在ASCII字符串中的base-10中可能有用。 (比较,例如,基数为2 32 表示。)

但是如果你真的必须以这种方式存储它,你将需要分配相关的内存量,使用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不会分配内存。