Qt中QString::toStdString().c_str() 偶尔存在问题

假设

QString str = "string";

const char* c = str.toStdString().c_str()单步调试显示的结果可能会是'\0'

而当我这样写时

std::string s = str.toStdString(); 

const char* c = s.c_str();

 c 是"string"

为啥呢???

原来有可能是这样的。

str.toStdString().c_str()中toStdString()是一个临时std::string变量,而c_str()是指向这个临时std::string变量的字符串地址,所以传给c时这个临时std::string变量已经被析构,其内容是空,c_str()自然就是'\0'。不过这种情况在未知情况下发生,有时直接写QString::toStdString().c_str() 也是好用的。

为了避免出错,最好还是


std::string s = str.toStdString(); 

const char* c = s.c_str();

这样写比较好。
多写几个字,少出点错,下次记住了!!

猜你喜欢

转载自blog.csdn.net/technologyleader/article/details/88668177