QString到std::string到const char*的转换在赋值中不起作用

QString to std::string to const char* conversion does not work in assignment

本文关键字:转换 赋值 不起作用 char std string const QString      更新时间:2023-10-16

此代码:

std::string a("TEST1");
const char* a_c = a.c_str();
QString b("TEST2");
const char* b_c = b.toStdString().c_str();
std::string s1 = std::string("A: ") + a.c_str();
std::string s2 = std::string("A: ") + a_c;
std::string s3 = std::string("B: ") + b.toStdString().c_str();
std::string s4 = std::string("B: ") + b_c;
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
std::cout << s3 << std::endl;
std::cout << s4 << std::endl;

打印:

A: TEST1
A: TEST1
B: TEST2
B: B: 

我不知道上次cout发生了什么。(很明显,我可以直接打印std::string,但这段代码是一个更大项目的例子,我需要C样式字符串)

在写这个问题的过程中,我发现了一个微不足道的错误:在这行之后

const char* b_c = b.toStdString().c_str();

b.toStdString()返回的std::string已不存在,因此调用了析构函数,b_c指针不再有效。相反,

std::string("B: ") + b.toStdString().c_str();

将连接的值复制到新字符串中,因此b.toStdString()的无效不再是问题。

显然a_c不是问题,因为a从未被破坏。