2010-11-11 53 views
19

我有一個錯誤在我的程序:「無法從字符串轉換爲char *」。我如何執行此轉換?如何在C++中將字符串轉換爲char *?

+1

請張貼代碼示例。 – superfro 2010-11-11 18:03:01

+0

已發佈的答案無回答實際問題。 – 2010-11-11 18:09:30

+0

感謝ü所有球員,它的作品! – Ptichka 2010-11-11 18:09:49

回答

22

如果你能解決一個const char*,你只需要調用c_str()方法就可以了:

const char *mycharp = mystring.c_str(); 

如果你真的需要修改char*,則需要使字符串的緩衝區的副本。一個vector是處理這個給你一個理想的方式:

std::vector<char> v(mystring.length() + 1); 
std::strcpy(&v[0], mystring.c_str()); 
char* pc = &v[0];
14

調用str.c_str()獲得const char*

const char *pch = str.c_str(); 

注意,最終const char*有效期只至str被更改或銷燬。


但是,如果你真的需要一個非const,你可能不應該使用std::string,因爲它並沒有設計爲允許改變其背後的基礎數據。這就是說,你可以通過調用&str[0]&*str.begin()獲得一個指向它的數據。

這樣做的醜陋應被視爲一個功能。在C++ 98中,std::string甚至不需要將其數據存儲在連續的內存塊中,因此這可能會爆炸到你的臉上。我認爲已經發生了變化,但我甚至不記得這是否適用於C++ 03或即將推出的下一版本的標準C++ 1x。

如果你需要做到這一點,可以考慮使用std::vector<char>代替。您可以用相同的方式訪問其數據:&v[0]&*v.begin()

3

string對象上使用c_str()方法得到const char*指針。警告:如果修改或銷燬對象string,則返回的指針不再有效。

1

std::string::c_str()返回一個C-串具有相同的內容作爲string對象。

std::string str("Hello"); 
const char* cstr = str.c_str(); 
3

既然你想從string去一個char*(即非const char*),你可以這樣做,但要注意:有在這裏小龍:

string foo = "foo"; 
char* foo_c = &foo[0]; 

如果你嘗試修改字符串的內容,你完全靠自己。

+0

問題不只是修改的內容 - 一個字符串的內容不能保證是連續的,所以它可能不是在所有的工作。 – CiscoIPPhone 2010-11-11 18:31:12

+0

我可能是錯在那裏,根據公認的回答這個問題,它保證是連續的,在新標準:http://stackoverflow.com/questions/1986966/does-s0-point-to-contiguous-characters-in -a-stdstring – CiscoIPPhone 2010-11-11 18:33:33

2

如果const char*對你有好處然後使用此:myString.c_str()

如果你真的需要char*和肯定知道char*將不會再改變你可以使用這個:const_cast<char*>(myString.c_str())

如果char*可能會改變你需要將字符串複製到其他東西中,然後使用它。其他的東西可能是std::vector,或new char[],這取決於你的需求。

8
//assume you have an std::string, str. 
char* cstr = new char[str.length() +1]; 
strcpy(cstr, str.c_str()); 

//eventually, remember to delete cstr 
delete[] cstr;