执行报错,error: cannot convert ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘char*’ for argument ‘1’ to ‘char* strcat(char*, const char*)’ strcat(result, r);
时间: 2023-09-14 19:06:01 浏览: 101
这个错误是因为 `strcat` 函数的第一个参数需要是 `char*` 类型的指针,而 `result` 是 `string` 类型的变量,不能直接传递给 `strcat` 函数。可以将 `result` 转换成 `char*` 类型的指针,再传递给 `strcat` 函数。修改后的代码如下所示:
```
char *ReplaceString(char *str, char *s1, char *s2) {
int a = strlen(s1);
int b = strlen(s2);
int c = strlen(str);
char * p;
string q, r, result;
r = string(s2);
p = strtok(str, s1);
q = string(p);
result = string(p);
while (p != NULL)
{
result += r;
p = strtok(NULL, s1);
q = string(p);
result += q;
}
char* res = new char[result.length() + 1]; // 分配新的内存空间来存储结果
strcpy(res, result.c_str()); // 将结果复制到新的内存空间中
return res;
}
```
这里使用了 `result += r` 和 `result += q` 来代替 `strcat(result, r)` 和 `strcat(result, q)`,这样可以直接将 `string` 类型的变量拼接起来,避免了类型转换问题。同时使用了 `new` 关键字来分配新的内存空间,避免了在返回结果时出现内存泄漏的问题。
阅读全文