QString in char
QString in char
sorry, hab schon ein paar Beiträge gelesen aber irgendwas mache ich falsch. Ich möchte einen QString in einen string wandeln in dann ausgeben:
QString s = QFileDialog::getExistingDirectory(
this,
"Choose a directory with the mp3 files",
"/home",
QFileDialog::ShowDirsOnly);
char *folder;
if (s.isEmpty() )
{ qDebug("no folder was selected");
return;
}
folder = s.toAscii().data();
qDebug("selected folder was: %s", folder);
Muß ich eigentlich speicher reservieren für folder ?
gruß
QString s = QFileDialog::getExistingDirectory(
this,
"Choose a directory with the mp3 files",
"/home",
QFileDialog::ShowDirsOnly);
char *folder;
if (s.isEmpty() )
{ qDebug("no folder was selected");
return;
}
folder = s.toAscii().data();
qDebug("selected folder was: %s", folder);
Muß ich eigentlich speicher reservieren für folder ?
gruß
Re: QString in char
Kannst ja mal versuchen wild im RAM rum zu schreibenwaldo hat geschrieben:Muß ich eigentlich speicher reservieren für folder ?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Abgesehen vom Sinn oder Unsinn der Idee (ich halte es für unsinnig, für sowas gibts qDebug() und/oder qPrintable()) kann dies nicht funktionieren:
Ich würde sagen dass könnte auch in einer Testaufgabe für einen Programmieranfänger stehen... deshalb verrate ich mal noch nicht warum es nicht geht und hoffe auch macman hält sich zurück. 
Code: Alles auswählen
QString s("Test");
const char *folder = s.toAscii().data();
qDebug("selected folder was: %s", folder);
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
das ich toAsci ins qdebug reinschreibe bin ich ja gekommen
qDebug("selected folder was: %s", s.toAscii().data());
aber wie könnt ich den Inhalt des QStrings in ein character array schreiben ?
so geht es nicht:
folder = new char [s.length ()];
folder = s.toAscii().data();
folder wird ein neue addresse zugewiesen, wie schreib ich den Inhalt in new reservierte Speicher ?
Bitte nicht lachen, oder tu es wenigstens heimlich
gruß + dank
qDebug("selected folder was: %s", s.toAscii().data());
aber wie könnt ich den Inhalt des QStrings in ein character array schreiben ?
so geht es nicht:
folder = new char [s.length ()];
folder = s.toAscii().data();
folder wird ein neue addresse zugewiesen, wie schreib ich den Inhalt in new reservierte Speicher ?
Bitte nicht lachen, oder tu es wenigstens heimlich
gruß + dank
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
QFile und QTextStream oder QSettings sind da wesentlich bessere Kanditaten als plain C .waldo hat geschrieben:warum ? weil ich es gerne in einen configfile (den später abspeichern möchte) reinschreiben will.
Und trotzdem hast Du noch nicht meine Frage beantwortet ("Ich würde sagen dass könnte auch in einer Testaufgabe für einen Programmieranfänger stehen... deshalb verrate ich mal noch nicht warum es nicht geht und hoffe auch macman hält sich zurück.")
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:
So wie es dort steht funktioniert es nicht - es crasht.
Der Grund liegt darin, dass QString::toAscii() ein QByteArray - Objekt erzeugt. Dies wird aber 'nach dem Semikolion' wieder zerstört. Dadurch ist dann auch der mit .data() erzeugte const char* - Pointer nicht mehr gültig.
Der Grund liegt darin, dass QString::toAscii() ein QByteArray - Objekt erzeugt. Dies wird aber 'nach dem Semikolion' wieder zerstört. Dadurch ist dann auch der mit .data() erzeugte const char* - Pointer nicht mehr gültig.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung