1
我有以下工作代碼:Qt的可變生命誤解
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly)) throw GException(GString("Failed to open file "));
QTextStream stream(&file);
QString s = stream.readAll();
QByteArray source = s.toUtf8();
const char *string = source.data();
glShaderSource(id, 1, &string, NULL);
glCompileShader(id);
qDebug() << QString(string);
如果我刪除QString
變量這樣,代碼繼續工作:
QByteArray source = stream.readAll().toUtf8();
const char *string = source.data();
glShaderSource(id, 1, &string, NULL);
glCompileShader(id);
qDebug() << QString(string);
但是,消除QByteArray
原因字符串以指向垃圾:
QString s = stream.readAll();
const char *string = s.toUtf8().data();
glShaderSource(id, 1, &string, NULL);
glCompileShader(id);
qDebug() << QString(string); // GARBAGE HERE
我找不到信息r在這裏的文檔喜歡這種行爲:http://doc.qt.io/qt-5/qstring.html#toUtf8
我想toUtf8()
方法不返回指向內部數組的指針,但創建一個新的。
我是Qt新手,因爲我在文檔中忽略了這一點,所以我不知道將來如何避免類似的問題。
我得到的,非常感謝。當我說'指針'時,我並不是說QByteArray是一個指針,但它包含一個指向數組的指針。無論如何,現在我看到了根本原因。 'toUtf8()'執行轉換,因爲內部編碼不是UTF-8。我沒有想過。 – Grief