【发布时间】:2020-12-11 11:52:45
【问题描述】:
我遇到了一个问题,在将QByteArray 转换为const char* 时我无法解释不是内联。这是一个例子:
QString string1("ABCDEFGHI");
const char* stringData1 = string1.toUtf8().constData();
qDebug() << "String:" << string1 << "\nbytearray:" << string1.toUtf8()
<< "\ndata immediate:" << string1.toUtf8().constData() << "\ndata stored:" << stringData1;
QString string2("ABCDEFGHJ");
const char* stringData2 = string2.toUtf8().constData();
qDebug() << "String:" << string2 << "\nbytearray:" << string2.toUtf8()
<< "\ndata immediate:" << string2.toUtf8().constData() << "\ndata stored:" << stringData2;
我得到以下输出:
String: "ABCDEFGHI"
bytearray: "ABCDEFGHI"
data immediate: ABCDEFGHI
data stored:
String: "ABCDEFGHJ"
bytearray: "ABCDEFGHJ"
data immediate: ABCDEFGHJ
data stored: ABCDEFGHJ
data stored 的输出不能保证在 case 1 中是错误的,但在 case 2 中是正确的。我可以交换 case 1 和 case 2,结果将是相同的 - 在 case 1 中错误,但在 case 中正确2.
内联转换似乎工作得很好。
如果使用const char* 变量存储结果,您是否发现从QByteArray 到const char* 的转换有任何问题?
【问题讨论】:
-
您在
QString::toUtf8返回的临时QByteArray上调用QByteArray::constData。所以stringData1和stringData2是悬空指针:未定义的行为。