2

私はこの問題について混乱しています:

Const Char* Test() {
    String a = "anything";
    Return a.c_str();
}

Void Main() {
    Cout << Test(); // returns crap!
}

誰かが私が考えていないことを知っていますか?このページはiPhoneに最適化されていません;-)

4

3 に答える 3

1

文字列をヒープに割り当ててみてください。

string *a=new string("anything");
return (*a).c_str();
于 2012-08-02T12:36:51.260 に答える
1

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();
}
于 2012-08-02T12:37:00.313 に答える
1

String aは自動メモリにあり、から戻ると破棄されるTest()ため、割り当てられたメモリc_strも解放されます

于 2012-08-02T12:29:57.433 に答える