gpt4 book ai didi

c++ - QString 格式化将不起作用 qDebug

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:54 24 4
gpt4 key购买 nike

我尽量避免在 QT 程序中混合 QStringchar* 类型。我有一个对话函数,它返回 QString 中的数据指针,但我得到了非常奇怪的结果。这段代码有什么问题?

编译器及环境 gcc (Debian 4.9.2-10) 4.9.2通过 qmake 标记:QMAKE_CXXFLAGS += -std=c++11

代码片段:

#include <QCoreApplication>
#include <iostream>
#define PCH(m) ( m.toAscii().data() )

// get the pointer short scripted
const char* CH(QString msg) {
const char* res = msg.toAscii().data();
return res;
}

int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);

const QString qformat = "%s does not work!";
const QString qvalue = "embedding";

// Works not
qDebug(CH(qformat), CH(qvalue));

// Works
qDebug(qformat.toAscii().data(), qvalue.toAscii().data());

// Works too but macro
qDebug(PCH(qformat), PCH(qvalue));

return app.exec();
}

结果

%s does not work! does not work!

embedding does not work!

embedding does not work!

最佳答案

在这里,您正在将 QString 复制到函数中,并返回指向函数内部已销毁数据的指针。这是已知的未定义行为,因为您正在返回指向垃圾的指针。返回 QString。

const char* CH(QString msg) {
const char* res = msg.toAscii().data();
return res;
}

关于c++ - QString 格式化将不起作用 qDebug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com