// 操作一
char * filePath = ui->filePath->text().toLatin1().data();
结果一
// 操作二
QByteArray QfilePath = ui->filePath->text().toLatin1();
char * filePath = QfilePath.data();
结果二
// 操作一
char * filePath = ui->filePath->text().toLatin1().data();
结果一
// 操作二
QByteArray QfilePath = ui->filePath->text().toLatin1();
char * filePath = QfilePath.data();
结果二
你的代码是你上面说的样子吗?我试了一下,两者完全没有区别,如下:
我查了一下Qt的说明文档,其中有一句话是:
The pointer remains valid as long as the byte array isn't reallocated or destroyed。
意思也就是说,只要ByteArray没有被重新分配或者销毁,返回的指针是一直有效的。而且,返回的指针是进行深拷贝以后返回的指针,所以,如果出现了你题目中的情况,只有一个原因,那就是在你使用filePath = QfilePath.data()的时候,QfilePath这个ByteArray已经被销毁了。你仔细检查一下代码,是否QfilePath已经出了作用域,如果QfilePath出了作用域,那它返回的指针也就是失效了。