0

我的问题是我不知道如何将 int value 转换为 char array char* m_value。我尝试使用 itoa 但它不起作用。itoa(m_val, m_wartosc, 10);也许还有其他功能可以做到这一点?

主文件

int main(int argc, char *argv[])
{
    LargeNumber l1;
    LargeNumber l3(172839); //how to convert this int to char*

    return 0;
}

大数.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

4 回答 4

5

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

  • 正如您从所有(错误的)其他答案中看到的那样,内存管理很棘手且容易出错。
  • 我看不出将您的值以 ASCII 字符串的形式存储在 base-10 中可能会有用。(例如,与 base-2 32表示相比。)

但是如果你真的必须这样存储它,你将需要分配相关的内存量,snprintf用于转换(itoa是一个非标准函数),并记住在正确的时间释放内存(你会有阅读和理解三法则)。

我强烈建议使用 astd::string而不是原始的 C 样式数组,因为它至少会处理自己的内存管理,然后您就可以使用std::stringstream.

于 2012-05-28T14:39:57.290 回答
0

的第二个参数itoa()需要是一个足够大的内存数组以存储以空字符结尾的字符串。一个例子:

int number = 172839;
char buffer[10];
itoa(number,buffer,10);
于 2012-05-28T14:35:15.233 回答
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());
        }
于 2012-05-28T14:36:17.630 回答
0

您必须首先分配数组

m_array = new char[20]

在调用 iota 之前在构造函数中。iota 不分配内存。

于 2012-05-28T14:37:25.040 回答