c++ - QString to char* conversion


Translate

I was trying to convert a QString to char* type by the following methods, but they don't seem to work.

//QLineEdit *line=new QLineEdit();{just to describe what is line here}

QString temp=line->text();
char *str=(char *)malloc(10);
QByteArray ba=temp.toLatin1();
strcpy(str,ba.data());

Can you elaborate the possible flaw with this method, or give an alternative method?



All Answers
  • Translate

    Well, the Qt FAQ says:

    int main(int argc, char **argv)
    {
     QApplication app(argc, argv);
      QString str1 = "Test";
      QByteArray ba = str1.toLocal8Bit();
      const char *c_str2 = ba.data();
      printf("str2: %s", c_str2);
      return app.exec();
    }
    

    So perhaps you're having other problems. How exactly doesn't this work?


  • Translate

    Maybe

    my_qstring.toStdString().c_str();

    or safer, as Federico points out:

    std::string str = my_qstring.toStdString();
    const char* p = str.c_str();
    

    It's far from optimal, but will do the work.


  • Translate

    The easiest way to convert a QString to char* is qPrintable(const QString& str), which is a macro expanding to str.toLocal8Bit().constData().


  • Translate

    David's answer works fine if you're only using it for outputting to a file or displaying on the screen, but if a function or library requires a char* for parsing, then this method works best:

    // 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() );
    
    // function that requires a char* parameter
    parseXML(cstr);
    

  • Translate

    Your string may contain non Latin1 characters, which leads to undefined data. It depends of what you mean by "it deosn't seem to work".


  • Translate

    EDITED

    this way also works

    QString str ("Something");
    
    char* ch = str.toStdString().C_str();
    

  • Translate

    the Correct Solution Would be like this

       QString k;
       k = "CRAZYYYQT";
       char ab[16];
       sprintf(ab,"%s",(const char *)((QByteArray)(k.toLatin1()).data()) );
       sprintf(ab,"%s",(const char *)((QByteArray)(k.toStdString()).data()));  
       sprintf(ab,"%s",(const char *)k.toStdString().c_str()  );
       qDebug()<<"--->"<<ab<<"<---";
    

  • Translate

    If your string contains non-ASCII characters - it's better to do it this way: s.toUtf8().data() (or s->toUtf8().data())