我正在处理我自己的名为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运算符
答案 0 :(得分:1)
你在这里犯的第一个明显错误是:
char* temp = new char[255];
temp = this->c_str();
您分配内存然后复制指针的值。所以首先你得到内存泄漏,然后根据你c_str()
的实现,你正在复制你不应该改变的地址(std::string
的{{1}}返回{ {1}})。
这是因为c_str()
的实际实现实际上不需要堆分配的数组,并且一些实现实际上在内部为短字符串存储一个小数组。
因此,如果您真的想要创建一个新字符串,那么最好的办法就是复制内存:
const char*
然后使用std::string
返回一个新字符串来初始化它。