QT4: QString in const char* umwandeln
QT4: QString in const char* umwandeln
Hallo,
ich möchte ein QString-Objekt als const char* auslesen. Wenn ich toAscii() verwende, steht in meiner Variable nur Schrott und wenn ich den Umweg über std::string mit toStdString() gehe, stürzt das Programm beim destruieren des std::string-Objektes ab!
Mache ich da etwas falsch?
ich möchte ein QString-Objekt als const char* auslesen. Wenn ich toAscii() verwende, steht in meiner Variable nur Schrott und wenn ich den Umweg über std::string mit toStdString() gehe, stürzt das Programm beim destruieren des std::string-Objektes ab!
Mache ich da etwas falsch?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QT4: QString in const char* umwandeln
Du liest keine DOKU. Dort würde man nämlich sehen dass toAscii() mitnichten const char* zurückliefert sondern QByteArray.Xander77 hat geschrieben:Mache ich da etwas falsch?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Doch, hab ich gelesen!
Hab natürlich ein QByteArray gehabt und wollte aus dem dann ein char-Array machen. Aber das ist meiner Meinung nach schon ziehmlich unpraktisch. Eigentlich müsste man ja mit toStdString() ein std::string-Objekt bekommen, aus dem man dann einfach mit c_str() ein const char* machen kann. Im Prinzip funktioniert das auch, aber ich habe den Verdacht, dass da in QT ein Fehler ist!
Sobald ich irgendwo toStdString() aufrufe, stürzt am Ende des Gültigkeitsbereichs der Variable das Programm mit folgender Fehlermeldung ab:
HEAP[PrintSimu.exe]: Invalid Address specified to RtlValidateHeap( 01090000, 016B47C8 )
Laut Kontext passiert das beim delete von std::basic_string!
Sobald ich irgendwo toStdString() aufrufe, stürzt am Ende des Gültigkeitsbereichs der Variable das Programm mit folgender Fehlermeldung ab:
HEAP[PrintSimu.exe]: Invalid Address specified to RtlValidateHeap( 01090000, 016B47C8 )
Laut Kontext passiert das beim delete von std::basic_string!
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
QString:toAscii().data() ist also umständlicher als QString::toStdString().c_str(). Wow. Zumal beides die Codierung wegschmeisst und nur für Debug-Zwecke benutzbar ist.
Dein Programm stürzt ab da Du, wie im anderen Thread von mir schon angemerkt, nicht qmake benutzt. Deshalb benutzt Du die falschen Libs im Debug-Modus. Dort muss nämlich QtCored4.lib anstatt QtCore4.lib gelinkt werden. Analog dazu die anderen Qt-Libs
Dein Programm stürzt ab da Du, wie im anderen Thread von mir schon angemerkt, nicht qmake benutzt. Deshalb benutzt Du die falschen Libs im Debug-Modus. Dort muss nämlich QtCored4.lib anstatt QtCore4.lib gelinkt werden. Analog dazu die anderen Qt-Libs
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Was heißt nur zu Debug-Zwecken benutzbar???
Man wird doch wohl aus einem QString einen char* oder ein std::string machen können! Das ging ja früher (QT 3.3.4) auch!!!
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Was heißt nur zu Debug-Zwecken benutzbar???
Habe ich irgendwas Gegenteiliges behauptet? Steht doch alles da...Xander77 hat geschrieben:Man wird doch wohl aus einem QString einen char* oder ein std::string machen können!
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Übrigens...
...ich habe die Bibliotheken entsprechend geändert, aber das Programm stürzt immernoch mit der gleichen Meldung ab!!! 
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Nimm qmake oder sonst einen ordentlichen Makefile-Generator damit wir Fehler in den VCProj-Einstellungen ausschliessen können.
Hast du auch /MDd anstatt /MD als Compilerflag benutzt, neu kompiliert und gelinkt? Und hast Du es mal mit toAscii().data() ausprobiert? Ein kleines Besipiel wäre auch nicht schlecht.
Hast du auch /MDd anstatt /MD als Compilerflag benutzt, neu kompiliert und gelinkt? Und hast Du es mal mit toAscii().data() ausprobiert? Ein kleines Besipiel wäre auch nicht schlecht.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Jetzt hat's geklappt!
Ich hatte eine Bibliothek vergessen! Danke für Deine Geduld! 
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Jetzt hat's geklappt!
Hast sie arg strapaziert...Xander77 hat geschrieben:Danke für Deine Geduld!
btw: Am Anfang fand ich die neue toAscii() - Funktion auch nicht so prickelnd. Aber wenn man es sich genau überlegt, ist es so wesentlich besser. Wie gesagt - toAscii() und toStdString() kann man eh nur zum debuggen benutzen (und da gibts dann imho auch qout & qDebug()) da bei dieser Umwandlung unweigerlich die Kodierung verloren geht.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Wie machst Du das dann sonst?
Wie kriegst Du denn dann einen char* oder std::string aus einem QString-Objekt (nicht zum Debuggen)?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Wie machst Du das dann sonst?
Wie ich oben schon sagte - toAscii().data() - also noch ein .data() anhängen.Xander77 hat geschrieben:Wie kriegst Du denn dann einen char* oder std::string aus einem QString-Objekt (nicht zum Debuggen)?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: