为什么是这个字符串到const char*转换制造Debian标识符,在Windows?
题
我想包装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
现在点删除/解放的记忆。
要解决的问题,请 username
和 password
QByteArray
而不是s const char*
s和使用 username.data()
, password.data()
而不是你在哪里使用 username
, password
之前。
不隶属于 StackOverflow