我有这种很简单的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