質問

以下の方法で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());

この方法で考えられる欠陥について詳しく説明していただけますか、または別の方法を教えていただけますか?

役に立ちましたか?

解決

さて、 Qtのよくある質問に述べています:

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

だから、おそらくあなたは他の問題を抱えています。どのように正確に動作しないのは?

他のヒント

多分

my_qstring.toStdString().c_str();

や、より安全な、フェデリコが指摘するように:

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

これは、はるかに最適なのですが、作業を行います。

QStringののへの文字を変換する最も簡単な方法* のある qPrintable(のconst QStringの&STR)に、 これは、マクロがstr.toLocal8Bit().constData()に拡大されます。

あなただけのファイルに出力するか、画面上に表示するためにそれを使用している場合は、 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);

編集済み

この方法でも機能します

QString str ("Something");

char* ch = str.toStdString().C_str();
あなたの文字列は未定義のデータへの非Latin1の文字、リードを含んでいてもよいです。それはあなたが「それが仕事に思えるdeosn't」によって何を意味するかに依存ます。

正解でしょうが、この

のようになります
   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<<"<---";

あなたの文字列が非ASCII文字が含まれている場合 - それは、このようにそれを行うには良いでしょう。 s.toUtf8().data()(又はs->toUtf8().data()

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top