¿Por qué esta conversión de QString a const char* produce un identificador de Debian en Windows?

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

  •  27-10-2019
  •  | 
  •  

Pregunta

Estoy intentando empaquetar libssh2 en Qt y tengo el siguiente código:

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

El problema es que ese nombre de usuario y contraseña no se conectan al sistema.¿Por qué?

Porque, según el depurador,

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

Esos no son los valores que he dado para el nombre de usuario o la contraseña.Intenté toAscii, toLatin1 y agregué (o no) el .data().Aún así, obtengo estos valores, en lugar de los valores esperados.Estoy en Windows, por lo que es aún más preocupante, ya que, hasta donde sé, nada de lo que tengo fue compilado en Debian o Ubuntu.

¿Que está pasando aqui?

¿Fue útil?

Solución

Este código:

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

es equivalente a esto:

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

¿Ves lo que está pasando?Para cuando la declaración se haya ejecutado, el temporal QByteArray El compilador lo ha eliminado nuevamente.Desde data() sólo devuelve un puntero al interno QByteArray buffer, username ahora apunta a la memoria eliminada/liberada.

Para resolver el problema, haga username y password QByteArrays en lugar de const char*s, y uso username.data(), password.data() en lugar de donde usaste username, password antes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top