簡體   English   中英

QString到std :: string到const char *的轉換在賦值中不起作用

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

這段代碼:

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不會被破壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM