QString in char

Alles rund um die Programmierung mit Qt
Antworten
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

QString in char

Beitrag von waldo »

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ß
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QString in char

Beitrag von macman »

waldo hat geschrieben:Muß ich eigentlich speicher reservieren für folder ?
Kannst ja mal versuchen wild im RAM rum zu schreiben :-) Wozu eigentlich die Umwandlung in char?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

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:

Code: Alles auswählen

QString s("Test");
const char *folder = s.toAscii().data();
qDebug("selected folder was: %s", folder);
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
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Drauf gekommen schon, aber warum ist das nötig?

Und deine andere Frage ist Plain Old C -> strcpy !
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

ok, strcpy funktioniert. warum ? weil ich es gerne in einen configfile (den später abspeichern möchte) reinschreiben will.

danke dir
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

waldo hat geschrieben:warum ? weil ich es gerne in einen configfile (den später abspeichern möchte) reinschreiben will.
QFile und QTextStream oder QSettings sind da wesentlich bessere Kanditaten als plain C .

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
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

hm, ich vermute mal:
QString s("Test");
const char *folder = s.toAscii().data();
qDebug("selected folder was: %s", folder);

s.toAscii().data() ist eine Funktion, die ich aufrufe und zurück bekomme ich einen pointer darauf ?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Christian81 hat geschrieben:und hoffe auch macman hält sich zurück. :)
Nach Feierabend halte ich mich immer zurück, genauso wie am Wochenende :-)
Antworten