Warum erzeugt diese Konvertierung von QString in const char * unter Windows eine Debian-Kennung?

StackOverflow https://stackoverflow.com/questions/5837442

  •  27-10-2019
  •  | 
  •  

Frage

Ich versuche, libssh2 in Qt zu verpacken und habe den folgenden Code:

const char* username = inUsername.toLocal8Bit().data();
const char* password = inPass.toLocal8Bit().data();

Problem ist, dass Benutzername und Passwort keine Verbindung zum System herstellen.Warum?

Weil laut Debugger

username  "5.1p1 Debian-6ubuntu2"
password  "5.1p1 Debian-6ubuntu2"

Dies sind nicht die Werte, die ich für den Benutzernamen oder das Passwort angegeben habe.Ich habe versucht, toAscii, toLatin1 und die .data () anzuhängen (oder nicht).Trotzdem erhalte ich diese Werte anstelle der erwarteten Werte.Ich bin unter Windows, weshalb es noch beunruhigender ist, da, soweit ich das beurteilen kann, nichts, was ich habe, unter Debian oder Ubuntu kompiliert wurde.

Was ist hier los?

War es hilfreich?

Lösung

Dieser Code:

const char* username = inUsername.toLocal8Bit().data();

entspricht:

const char * username;
{
    const QByteArray l8b = inUsername.toLocal8Bit();
    username = l8b.data();
}

Sehen Sie, was los ist?Zum Zeitpunkt der Ausführung der Anweisung wurde der temporäre QByteArray vom Compiler erneut gelöscht.Da data() nur einen Zeiger auf den internen QByteArray-Puffer zurückgibt, zeigt username jetzt auf gelöschten / freigegebenen Speicher.

Um das Problem zu lösen, erstellen Sie username und password QByteArrays anstelle von const char*s und verwenden Sie username.data(), password.data(), wo Sie zuvor username, password verwendet haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top