Как мне преобразовать 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 *. Как я могу это исправить?

1

Решение

Это потому, что data () возвращает адрес буфера в байтовом массиве, вы можете прочитать его, но, очевидно, вы не должны его записывать.
У вас есть свой собственный буфер вне байтового массива. Если вы хотите данные, вы должны скопировать буфер bytearray в myMailBoName.

использовать функцию memcpy

3

Другие решения

попробуйте этот фрагмент кода

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

Используйте strdup. Это делает размещение и копию одновременно. Просто не забудьте освободить его, как только вы закончите.

1

Вы действительно можете использовать strdup (StackOverflow вопрос об этом), как рекомендует Майк, но вы также можете сделать это:

// 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 аналогичный вопрос.

1

Я использую что-то вроде этой обертки:

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())

По крайней мере, это экономит немного печатать … 🙂

0

рассмотрим следующий пример
QString str = "BlahBlah;"

попробуй это
char* mychar = strdup(qPrintable(str));

или это
char* mychr = str.toStdString().c_str();

или это
char* mychar = strdup(str.ascii());

Каждый синтаксис работал на меня;)

0
По вопросам рекламы [email protected]