代码之家  ›  专栏  ›  技术社区  ›  mawia

qstring到char*转换

  •  76
  • mawia  · 技术社区  · 16 年前

    我试图通过以下方法将qstring转换为char*类型,但它们似乎不起作用。

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

    你能详细说明这种方法可能存在的缺陷,还是给出一种替代方法?

    8 回复  |  直到 7 年前
        1
  •  103
  •   bur    7 年前

    嗯, Qt FAQ 说:

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

    所以也许你还有其他问题。这到底怎么不管用?

        2
  •  39
  •   davidnr    10 年前

    也许吧

    my_qstring.toStdString().c_str();

    或者更安全,正如费德里科指出的:

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

    这远不是最理想的,但会起作用的。

        3
  •  34
  •   KernelPanic    10 年前

    最简单的转换方法 QString 到 烧焦* 是 qPrintable(const QString& str) , 它是一个宏扩展到 str.toLocal8Bit().constData() .

        4
  •  6
  •   Alex    16 年前

    如果您只将david的答案用于输出到文件或显示在屏幕上,那么david的答案很有用,但是如果函数或库需要char*进行解析,那么此方法最有效:

    // 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);
    
        5
  •  3
  •   Jorge Luis    8 年前

    编辑

    这样也行

    QString str ("Something");
    
    char* ch = str.toStdString().C_str();
    
        6
  •  2
  •   gregseth    16 年前

    字符串可能包含非拉丁字符,这会导致未定义的数据。这取决于你所说的“它似乎不起作用”。

        7
  •  2
  •   sam    10 年前

    正确的解决方案是这样的

       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<<"<---";
    
        8
  •  0
  •   AlexDarkVoid    7 年前

    如果字符串包含非ascii字符-最好这样做: s.toUtf8().data() (或 s->toUtf8().data() )

    推荐文章