如何将QString转换为char *

时间:2012-11-15 22:10:17

标签: c++ qt char qstring

我有一个QString,我想将其转换为char *而不是QChar *,因为我将它传递给一个带有char *的方法,但是如果没有它获取const char我就无法转换它*。例如,我尝试过:

QString name = "name";
QByteArray byteArray = name.toUtf8();
myMailboxName = byteArray.constData();

QString name = "name";
QByteArray byteArray = name.toUtf8();
myMailboxName = byteArray.data();

其中myMailboxName是我班级中的私人字符*。但是我得到一个错误,因为它返回一个const char *并且不能将它分配给char *。我该如何解决这个问题?

6 个答案:

答案 0 :(得分:3)

这是因为data()返回bytearray中缓冲区的地址,你可以读取它,但显然你不应该写它。 你在bytearray之外有自己的缓冲区。如果需要数据,则应将bytearray的缓冲区复制到myMailBoName。

使用memcpy函数

答案 1 :(得分:2)

试试此代码段

const char *myMailboxName = name.toLatin1().data();

答案 2 :(得分:1)

使用strdup。它同时进行分配和复制。只要记得在完成后立即释放它。

答案 3 :(得分:1)

你可以真正使用strdupstackoverflow question about it),正如迈克建议的那样,但你也可以这样做:

// copy QString to char*
QString filename = "C:\dev\file.xml";
char* cstr;
string fname = filename.toStdString();
cstr = new char [fname.size()+1];
strcpy( cstr, fname.c_str() );

到达那里:stackoverflow similar question

答案 4 :(得分:0)

我使用类似这个包装器的东西:

template<typename T, typename Y>
void CharPasser(std::function<T(char *)> funcToExecute,  const Y& str)
{
    char* c = 0;
    c = qstrdup(c, str.c_str());
    funcToExecute(c);
    delete[] c;
}

int SomeFunc(char* ){}

然后使用它:

CharPasser<int, std::string>(SomeFunc, QString("test").tostdString())

至少可以节省一些打字......:)

答案 5 :(得分:0)

请考虑以下示例
QString str = "BlahBlah;"

试试这个char* mychar = strdup(qPrintable(str));

或者这个{{{ 1}}

或者这个char* mychr = str.toStdString().c_str();

每种语法都适用于我;)