char * string substract函数抛出异常

时间:2015-06-23 02:58:08

标签: c++ arrays string char

我正在处理我自己的名为PString的字符串类,我有这个功能 找到一个特定的字符,比如6,现在我有了这个函数叫做substr short fo substract,我想从0减去[insertnumber]。 我尝试这样做的方式是:

PString string;
int to = 0;
string = "A string = a string"; // lol
string.find('=', to);
string.substr(to);

我的查找功能很好,可以100%工作,但我的substr功能确实无效。 这是我的substr函数:

void PString::substr(int to) {
    char* temp = new char[255];
    temp = this->c_str();
    for (int i = 0; i < to; i++) {
        temp[i] = ' ';
    }
}

this-&gt; c_str()只返回对象所持有的当前字符串,这是 防止失败,但我无法通过第一个for循环,temp [i] =&#39; &#39;只是抛出一个例外,我完全不知道为什么。

哦,是的,我知道我的功能并没有删除临时和更多内容,但是这还没有实现,因为我试图让for循环首先工作。

编辑修复makign更多功能(从已创建的PString中创建一个新的PString) 也使用memcpy而不是只做一个简单的equals运算符

1 个答案:

答案 0 :(得分:1)

你在这里犯的第一个明显错误是:

char* temp = new char[255];
temp = this->c_str();

您分配内存然后复制指针的值。所以首先你得到内存泄漏,然后根据你c_str()的实现,你正在复制你不应该改变的地址(std::string的{​​{1}}返回{ {1}})。

这是因为c_str()的实际实现实际上不需要堆分配的数组,并且一些实现实际上在内部为短字符串存储一个小数组。

因此,如果您真的想要创建一个新字符串,那么最好的办法就是复制内存:

const char*

然后使用std::string返回一个新字符串来初始化它。