2012-05-28 48 views
0

我的問題是,我不知道如何將int值轉換爲字符數組char* m_value。我試圖使用itoa,但它不起作用。 itoa(m_val, m_wartosc, 10);也許還有其他一些功能可以做到這一點?如何將int轉換爲char *?

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

爲什麼你需要,你已經有了一個'int'的構造函數。 –

+0

爲什麼要以ASCII字符串的形式將您的號碼存儲在10進制中? –

+0

我需要爲我的程序同時使用它們。我已經有一個會拿''string''的。但是需要一個具有整型值的方法。 – mathewM

回答

0

itoa()需要的第二個參數是在存儲器足夠大來存儲空終止字符串的數組。舉個例子:

int number = 172839; 
char buffer[10]; 
itoa(number,buffer,10); 
+0

所以在我的情況下,我不能在我的char * m_array沒有聲明大小之前使用itoa? – mathewM

+0

是的。在嘗試在那裏存儲字符串之前,您需要在該緩衝區中實際分配內存。 – Adam27X

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()); 
     } 
+0

沒有爲'm_array'分配內存。 – hmjd

+0

我忘了它,謝謝 – sithereal

+0

它太短了。 – hmjd

0

你必須先在陣列

m_array = new char[20] 

在構造函數調用之前絲毫分配。 iota不分配內存。

5

簡單的答案是:不。有兩個原因:

  • 正如你可以從所有的(錯誤的)其他答案中看到的,內存管理是棘手的並且容易出錯。
  • 我看不到如何在base-10中將值存儲在ASCII字符串中可能會有用。 (相比,說,基2 表示。)

但如果你真的必須這樣保存它,你將需要分配的內存相關的量,使用snprintf轉換(itoa是一個非標準的功能),並記住在正確的時間釋放內存(您將閱讀並瞭解有關Rule of Three)。

我強烈建議使用std::string而不是原始C風格的數組,因爲它至少可以處理自己的內存管理,然後您可以使用std::stringstream來填充它。

+1

使用'snprintf'(C90/C++ 03)。並使用'std :: vector '來獲得必要的內存。 –

+0

@JamesKanze:是的,我同意'snprintf',回答修改。在存儲方面,我暗示有很多更好的慣用方法來處理這個問題; '矢量'只是一種可能性。 –

+0

你能寫一下snprintf函數應該在我的程序中看起來如何? – mathewM