从字符串修改字符数组

问题描述:

我想初始化一个字符串,然后修改生成的字符数组。我做了:从字符串修改字符数组

std::string str = "hello world"; 
const char* cstr = str.c_str(); 

// Modify contents of cstr 

但是,因为cstr是const,所以我不能修改元素。如果我删除const,我不能使用c_str()

达到此目的的最佳方法是什么?

+3

为什么你不能修改字符串本身? –

+1

*达到此目的的最佳方法是什么?*请直接修改'std :: string'。 – NathanOliver

+0

可以用'const_cast'来做到这一点,然而,这是一个非常非常糟糕的主意,因为字符串中的内部成员会认为只有他们正在修改缓冲区,并且取决于您如何更改它,您可能会意外后来的奇怪行为。 (不要问我怎么知道,我宁愿不再考虑它,) – Donnie

只需使用the std::string member functions修改str即可。

这些功能包括operator[]

由于C++ 11(并假设符合实现),&str[0]是您需要的指针。

最好的和最直接的方式做到这一点是利用自身operator[]只是直接修改std::string

str[0] = 'G'; // "Gello world" 

如果你真的需要复制C-串,无论出于何种原因,那么你必须创建一个新的缓冲区,例如:

char* buffer = new char[str.length() + 1]; 
strcpy(buffer, str.c_str()); 
delete[] buffer; 

这里的一个明显缺陷是动态分配。只需坚持直接修改std::string,这就是班级的写作内容,让您的生活更轻松。

+0

@RemyLebeau谢谢。 –