Programing

QString에서 char *로 변환

lottogame 2020. 9. 23. 08:02
반응형

QString에서 char *로 변환


다음 방법으로 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 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();
}

그래서 아마도 다른 문제가있을 것입니다. 이것이 정확히 어떻게 작동하지 않습니까?


아마도

my_qstring.toStdString().c_str();

Federico가 지적했듯이 더 안전합니다.

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

최적과는 거리가 멀지 만 작업을 수행 할 것입니다.


개종하는 가장 쉬운 방법은 QString을문자는 * 이다 (QString & STR const를) qPrintable 에 확대 매크로입니다 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);

문자열에 Latin1이 아닌 문자가 포함될 수 있으며 이로 인해 데이터가 정의되지 않습니다. "작동하지 않는 것 같습니다"라는 의미에 따라 다릅니다.


편집 됨

이 방법도 작동합니다

QString str ("Something");

char* ch = str.toStdString().C_str();

올바른 솔루션은 다음과 같습니다.

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

참고 URL : https://stackoverflow.com/questions/2523765/qstring-to-char-conversion

반응형