Konvertierungsproblem

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
sh4d0w
Beiträge: 1
Registriert: 4. März 2011 15:03

Konvertierungsproblem

Beitrag von sh4d0w »

Hallo Qt-Community,

ich bin noch Recht neu in Qt4 und habe ein kleines Problem mit der Konvertierung von QString zu const char*.

Code: Alles auswählen

Config* cfg = Config::getInstance();
QString ip = cfg->getHostIP();
QString network = cfg->getNetwork();
QString filter = QString(
   "(src host %1 and not dst net %2) or "
   "(dst host %1 and not src net %2) or "
   "port 53").arg(ip, network);
const char* filter_exp = filter.toAscii().constData();
Wenn ich mir die Variable ausgeben lasse mit qDebug("%s", filter_exp) sehe ich den korrekten String, jedoch bekomme ich bei der Übergabe als Parameter an eine C third-party library (libpcap) Funktion den Fehler "@eD: illegal token: @". Wenn ich den relevanten Code wie folgt ändere funktioniert es problemlos:

Code: Alles auswählen

QByteArray filter = QString(
   "(src host %1 and not dst net %2) or "
   "(dst host %1 and not src net %2) or "
   "port 53"
   ).arg(ip, network).toAscii();
const char* filter_exp = filter.constData();
Ich verstehe irgendwie nicht warum sich das ganze so verhält. Kann mich darüber jemand aufklären?
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

könnte vielleicht seind das das was du da zurückgibst nicht mehr lebt wenn dus benutzt ... will heissen der QByteArray den QString::toAscii() erzeugt lebt da schon nimmer, also zeigt der Pointer den du da speicherst ins Nirwana ... ein häufiger Fehler :) Lösung hast du ja schon gefunden, entweder den QByteArray zwischenspeichern oder einfach gleich den pointer frisch holen ...
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Antworten