Seite 1 von 1

QString in char

Verfasst: 8. Februar 2007 15:22
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ß

Re: QString in char

Verfasst: 8. Februar 2007 15:52
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?

Verfasst: 8. Februar 2007 16:06
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. :)

Verfasst: 8. Februar 2007 16:35
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

Verfasst: 8. Februar 2007 17:08
von Christian81
Drauf gekommen schon, aber warum ist das nötig?

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

Verfasst: 8. Februar 2007 18:10
von waldo
ok, strcpy funktioniert. warum ? weil ich es gerne in einen configfile (den später abspeichern möchte) reinschreiben will.

danke dir

Verfasst: 8. Februar 2007 18:23
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.")

Verfasst: 8. Februar 2007 18:49
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 ?

Verfasst: 8. Februar 2007 18:53
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.

Verfasst: 9. Februar 2007 10:17
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 :-)