gpt4 book ai didi

c++ - 使用流的字符串连接返回垃圾

转载 作者:行者123 更新时间:2023-11-28 02:35:17 24 4
gpt4 key购买 nike

我可能应该开始声明我是 C++ 的新手,而且由于我来自高级语言,我可能会遗漏一些我无法识别的技术问题。

我有以下方法:

const char * Point::toString() const {
std::ostringstream stream;
stream << "[" << x << ", " << y << "]"; //[3, 5] for example
return stream.str().c_str();
}

然后我这样调用它:

Point p1 (3, 5);
std::cout << p1.toString() << std::endl;

但是,这会打印出一些垃圾。

我做错了什么?另外,我的 toString() 方法真的有效吗?我是否通过分配新的 char * 并且从不释放它来泄漏内存?

最佳答案

string::c_str() 返回的 char 指针仅在字符串的生命周期内有效(并且仅在未修改时有效)。

但是 stream.str() 返回一个临时 字符串对象,您需要将其存储在某个地方。否则它将在您调用该函数的确切语句之后被销毁

但即使你写

string result = stream.str();
return result.c_str();

然后您销毁函数内部的字符串对象,使 c_str() 返回的 char 指针失效,并在使用时立即导致未定义的行为(取消引用).

最后,最好只返回一个字符串:

return stream.str();

关于c++ - 使用流的字符串连接返回垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com