C++ std::stringstream 到 const char* 转换

Jan*_*Jan 2 c++ string type-conversion string-conversion

我试图将 a 转换stringstream为 a const char*,但总是得到一个空字符串。

我的代码:

#include<string>
#include<sstream>
#include<stdio.h>

const char* test(std::string city, std::string street, int houseNumber, int postCode) {
std::stringstream ss;
ss << city << " " << street << " " << houseNumber << " " << postCode;
const std::string tmp =  std::string{ss.str()};
const char* str = tmp.c_str();
return str;
}

int main(){
printf(test("demo", "Demo", 1, 1234));
}
Run Code Online (Sandbox Code Playgroud)

预期输出:demo Demo 1 1234

我尝试了如何将 std::string 转换为 const char* 或 char*?中提到的所有增强功能。,但我没有成功。

Ton*_*vel 5

问题是您const char*指向的字符串数据在return str;. const char*只要关联的std::string实例在范围内,指针就会保持有效。这是假设您在此处显示的代码位于函数内。在这种情况下,字符串tmp将在 后超出范围return str;,并且将调用其析构函数,导致任何指向其字符数据的指针成为悬空指针

返回一个std::string,并调用c_str()返回的字符串。如前所述,const char*只要关联的std::string实例在范围内,您就可以使用该指针。