读取字符串C++的字符时出错



我展示了我的代码,在读取字符串字符时出错。在NULL之前,我的调试器中一切正常。

*Warning    C4715   `String::equas`: not all control paths return a value*  

我不能使用它,因为我正在为参数使用NULL指针。

我该如何解决这个问题?

非常感谢,祝你今天愉快!

标题:

class String
{
public:
String();
bool empty();        
String(char * other_str);
bool equals(const String other_str);
private:
char* m_str;
};

我的代码:

#include "String.hpp"
#include <string>
#include<iostream>

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

String::String()
:m_str(NULL)
{
}
String::String(char * other_str)
{
}
bool String::empty()
{
return true;
}
bool String::equals(const String other_str)
{
if (m_str == NULL && other_str.m_str == NULL) {
return true;
}
if (m_str == NULL && other_str.m_str != NULL) {
return false;
}
if (m_str != NULL && other_str.m_str == NULL) {
return false;
}
if (m_str != NULL && other_str.m_str != NULL) {
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;
}
else {
return true;
}
}
}
}
}

我将添加以下代码:

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

void my_cpy(char dest, const char* src) {
int i = 0;
while (src[i] != '') {
dest[i] = src[i];
i++;
}
dest[i] = '';
}

char mytrdup(const char *s) {    
char* d = (char*)malloc((my_len(s) + 1) * sizeof(char));        
if (d == NULL) {
return NULL;            
}           
else{
my_cpy(d, s);       
}                       
return d;                           
}

String empty_string2(NULL);

这将调用构造函数版本:

String::String(char* other_str) {}

它什么都不做,使m_str指针悬空/未初始化。您应该以某种方式更改此构造函数,方法是复制字符串并相应地设置m_str指针,或者将m_str设置为与参数相同的地址。无论哪种情况,都取决于你想要实现什么。

此外,您的代码中还存在许多其他问题。我注意到您中已经实现了函数my_len。您应该将*p++更改为p++。我想知道这是如何通过编译btw的,因为参数是const char*

最后,编译器的警告是正确且非常清楚的,尽管并不是您目前面临问题的根源

EDIT:要复制字符串,可以这样编写构造函数:

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

此外,最好在代码中使用null_ptr而不是NULL。自C++11以来,这是空指针的标准。

我添加了TEST_TRUE,然后它就正常工作了。

相关内容

  • 没有找到相关文章

最新更新