2017-01-03 11 views
0

私はこのコードを使用しています。文字列の文字を読み取る際にエラーが発生しました。メモリを割り当てる

多分それは簡単ですが、今はできません。これについて私を助けてください。この関数では常にNULLを参照しています。

どうすればこの問題を解決できますか?私はそれを行うことはできません。

ありがとうございます。

コード:

int my_len(const char* p) { 

     int c = 0; 
     while (*p != '\0') 
     { 
      c++; 
      *p++; 
     } 
     return c; 
    } 


String::String() 
    :m_str(NULL) 
{ 
} 


String::String(char * other_str) 
{ 
} 
{ 

    int mystrlen = my_len(m_str); 
    int myrhslen = my_len(other_str.m_str); 

    if (mystrlen != myrhslen) 
    { 
     return false; 
    } 
    else 
    { 
     for (int i = 0; i < mystrlen; i++) 
     { 
      if (m_str[i] != other_str.m_str[i]) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
} 
} 
+0

'String(" Hello ")'だけを書く場合は、 'String :: String(const char * other_str)'が必要です。 – MSalters

答えて

1

あなたのデフォルト以外のコンストラクタは空の実装を持っています

String::String(char * other_str) 
{ 
} 

だからここm_strが初期化されていない残っています。それはそうのようなあなたの意図である場合 あなたは多分、文字列をコピーすることができます:

String::String(char * other_str) 
{ 
    m_str = strdup(other_str); 
} 

しかし、その後、あなたは、例えば、自分をSTRDUPによって割り当てられたメモリを管理する必要があります

+0

ありがとうございました。大丈夫です。今私はmy_strdup関数を作成しています。なぜなら、私は常に関数を実行しなければならないからです。 –

関連する問題