0

私の問題は、 int 値を char array に変換する方法がわからないことchar* m_valueです。itoa を使用しようとしましたが、動作しません。itoa(m_val, m_wartosc, 10);多分これを行うための他の機能がありますか?

メイン.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

4 に答える 4

5

簡単な答えは次のとおりです。理由は 2 つあります。

  • 他のすべての (間違った) 回答からわかるように、メモリ管理はトリッキーでバグが発生しやすいものです。
  • 値を 10 進法で ASCII 文字列に保存することがどのように役立つかわかりません。(たとえば、基数 2 の32表現と比較してください。)

しかし、本当にこの方法で保存する必要がある場合は、適切な量のメモリを割り当て、snprintf変換に使用し (itoaは非標準関数です)、正しい時間にメモリを解放することを忘れないでください( 3 のルールについて読んで理解すること)。

生の C スタイル配列の代わりに aを使用することを強くお勧めしますstd::string。これは、少なくとも独自のメモリ管理を処理し、std::stringstream.

于 2012-05-28T14:39:57.290 に答える
0

最初に配列を割り当てる必要があります

m_array = new char[20]

iotaを呼び出す前にコンストラクターで。iotaはメモリを割り当てません。

于 2012-05-28T14:37:25.040 に答える
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

の 2 番目の引数はitoa()、null で終わる文字列を格納するのに十分な大きさのメモリ内の配列である必要があります。例:

int number = 172839;
char buffer[10];
itoa(number,buffer,10);
于 2012-05-28T14:35:15.233 に答える