2017-01-03 985 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自己,例如內存分配在析構函數中:

String::~String() 
{ 
    if (m_str != NULL) 
     free(m_str); 
} 
+0

非常感謝。這是okey。現在我正在創建my_strdup函數,因爲我必須始終執行我的功能。 –