我正在使用此代码。
也许这很容易,但现在我做不到。请帮我解决这个问题。我在这个函数中看起来总是为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 :(得分: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);
}