2017-04-20 188 views
0

我想初始化一個字符串,然後修改生成的字符數組。我做了:從字符串修改字符數組

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

回答

4

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

這些功能包括operator[]

由於C++ 11(並假設符合實現),&str[0]是您需要的指針。

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謝謝。 –