我想初始化一個字符串,然後修改生成的字符數組。我做了:從字符串修改字符數組
std::string str = "hello world";
const char* cstr = str.c_str();
// Modify contents of cstr
但是,因爲cstr是const,所以我不能修改元素。如果我刪除const,我不能使用c_str()
。
達到此目的的最佳方法是什麼?
我想初始化一個字符串,然後修改生成的字符數組。我做了:從字符串修改字符數組
std::string str = "hello world";
const char* cstr = str.c_str();
// Modify contents of cstr
但是,因爲cstr是const,所以我不能修改元素。如果我刪除const,我不能使用c_str()
。
達到此目的的最佳方法是什麼?
最好的和最直接的方式做到這一點是利用自身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
,這就是班級的寫作內容,讓您的生活更輕鬆。
@RemyLebeau謝謝。 –
爲什麼你不能修改字符串本身? –
*達到此目的的最佳方法是什麼?*請直接修改'std :: string'。 – NathanOliver
可以用'const_cast'來做到這一點,然而,這是一個非常非常糟糕的主意,因爲字符串中的內部成員會認爲只有他們正在修改緩衝區,並且取決於您如何更改它,您可能會意外後來的奇怪行爲。 (不要問我怎麼知道,我寧願不再考慮它,) – Donnie