查找并替换const char数组的一部分

时间:2011-09-21 10:01:47

标签: c++ string arrays

我的问题如下:

  • 我想要执行我要描述的操作的函数提供const char*
  • 提供的是不确定长度的文件名(包括完整的绝对路径)
  • 我想找到子串output的出现位置并将其替换为input
  • 这些操作的输出必须是另一个const char*(要更改的代码太多以用std::string替换它)

我想要做的是以下

string name(filename); //filename is the "const char*" provided by the caller of the function
string portion("output");
name.replace(name.find(insert),insert.length(),"input");
const char* newfilename = (char*)name.c_str();

现在,我的问题:

  • 会做这项工作吗?
  • 有更好的方法来获得我需要的东西吗?

感谢任何有帮助的人。

费德里科

1 个答案:

答案 0 :(得分:3)

这会有效,但您不需要name.c_str()上的演员表(事实上,这是错误的:c_str() returns a const char *)。

但是,只要您修改name.c_str(),或name超出范围,您从name获得的指针就会失效。因此,请不要尝试从函数返回newfilename

如果你需要它来保持,你别无选择,只能动态分配内存。标准做法是使用智能指针自动管理deallocation.const char *,你别无选择,只能自己管理。所以你可以这样做:

char *newfilename = new char[name.length() + 1];
strcpy(newfilename, name.c_str());
return newfilename;
...

delete [] newfilename;

<小时/> *嗯,标准做法是使用std::string!如果您需要与传统的C API接口,那只会变得棘手。