私はこの問題について混乱しています:
Const Char* Test() {
String a = "anything";
Return a.c_str();
}
Void Main() {
Cout << Test(); // returns crap!
}
誰かが私が考えていないことを知っていますか?このページはiPhoneに最適化されていません;-)
文字列をヒープに割り当ててみてください。
string *a=new string("anything");
return (*a).c_str();
C言語はスタックベースです。関数Test()の文字列aはスタックに割り当てられます。
const Char* Test() {
std::string a = "anything"; // Allocated in stack based
return a.c_str(); // A is freeing for return.
}
Void Main() {
std::cout << Test(); // returns crap!
}
const char* Test(std::string *a) {
*a = "anything";
return a->c_str();
}
Void Main() {
std::string a;
std::cout << Test(&a);
}
また
const Char* Test() {
**static** std::string a = "anything"; // Allocated in data memory
return a.c_str(); // data memory freed when application terminating.
}
Void Main() {
std::cout << Test();
}
String a
は自動メモリにあり、から戻ると破棄されるTest()
ため、割り当てられたメモリc_str
も解放されます