我想包装libssh2在夸脱的,并具有下列代码:

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

问题是,用户名和密码不连接的系统。为什么?

因为,根据调试器,

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

这些都是不值我的用户名和密码。我已经试过toAscii,toLatin1,并添加(或不)。数据().不过,我得到这些价值观,而不是预期值。我在窗口,这就是为什么它甚至更加令人不安的,因为,尽我所知,没有我有的是汇编关于Debian或Ubuntu。

什么在这里?

有帮助吗?

解决方案

这个代号:

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

相当于这样的:

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

你看到什么了?由当时的声明已经执行,暂时的 QByteArray 已被删除,通过编译器。由于 data() 只有返回指向内部 QByteArray 缓冲区, username 现在点删除/解放的记忆。

要解决的问题,请 usernamepassword QByteArray而不是s const char*s和使用 username.data(), password.data() 而不是你在哪里使用 username, password 之前。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top