我在用C編寫的第三方庫中有一個函數:char* fix_filename_slashes(char* path)
。該函數需要傳遞一個可變的C字符串,以便它可以將路徑中的所有斜槓改爲基於操作系統的正確使用。我在Facade中使用的所有字符串都被聲明爲std::string
s。我試圖簡單地使用foo.c_str()
作爲期望C字符串不改變它,需要一個const char *
所有其他的功能,但該功能會導致錯誤:Error: Argument of type "const char *" is incompatible with parameter of type "char *"
C++:將std :: string傳遞給想要更改字符串的C函數的正確實現?
是我想出了結果:
char* tempf = const_cast<char*>(filename.c_str());
filename = std::string(fix_filename_slashes(tempf));
tempf = NULL;
認爲「正確」或有其他(更正確?)方式來完成任務?
編輯
Whups。顯然該函數返回字符串的COPY。仍然有一些很好的答案已經給出。
它有未定義的行爲寫在它的所有 –
@Gene Bushuyev:你能解釋UB,所以我知道什麼是錯的? – Casey
21.3.6 ... const charT * c_str()const; ....「程序不得改變任何存儲在陣列中的值的」 – fizzer