我有這種很簡單的C++程序:在成員變量存儲的std :: to_string(x)的.c_str()產生垃圾
using namespace std;
class TheClass
{
private:
const char *_numberString;
public:
TheClass(int number)
{
_numberString = to_string(number).c_str();
}
operator const char *()
{
return _numberString;
}
};
int main(int argc, const char * argv[])
{
TheClass instance = 123;
cout << (const char *)instance << endl;
return 0;
}
當我在Xcode運行它,它記錄\367\277_\377
。如果我改成這樣但是:
using namespace std;
class TheClass
{
public: // Change 1/2
const char *_numberString;
public:
TheClass(int number)
{
_numberString = to_string(number).c_str();
}
operator const char *()
{
return _numberString;
}
};
int main(int argc, const char * argv[])
{
TheClass instance = 123;
instance._numberString = to_string(123).c_str(); // Change 2/2
cout << (const char *)instance << endl;
return 0;
}
它記錄123
像它應該。我看不到我做錯了什麼。即使我將123更改爲另一個號碼,也會記錄完全相同的內容。
絕對沒有理由訴諸'char *'。 iostream的'operator <<'處理'std :: string'就好了。 – PaulMcKenzie 2014-12-02 18:24:53
@Cyber我沒有看到Q&A真的是一個騙局。我真的很樂意爲此解決這個問題,但是這個鏈接問題至少錯過了提供一個MCVE,而這個問題。此外,所描述的情況稍有不同,從給出的答案中可以看出實際發生的情況。 – 2014-12-02 19:33:33