• 6193阅读
  • 9回复

[提问]qstring转char* [复制链接]

上一主题 下一主题
离线x_y_x
 
只看楼主 倒序阅读 楼主  发表于: 2012-01-03
我在DIALOG中有一个LINEEDIT名为edt,然后我用如下代码想将QString转换为char*
    char *p;
    QString q;
    q=ui->edt->text();
    p=q.toLocal8Bit().data();
    if(p=="hello") printf("ok");
    printf("%s",p);

运行之后我在LINEEDIT中输入hello,却并没有显示"ok",但最后一行显示结果p的确是hello
请问这是什么原因啊??
而且包括toascii().data(),tolatin1().data()我都试过了,结果都是一样的。。
离线roywillow

只看该作者 1楼 发表于: 2012-01-04
想想C里面字符串对比是怎么实现的吧

某幢公寓的301和401难道能说是同一间公寓吗?但它们确实是同样的户型,一模一样……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线x_y_x
只看该作者 2楼 发表于: 2012-01-04
回 1楼(roywillow) 的帖子
感谢回复,可是我想做的并不是字符串对比,而是一个函数需要char*类型的参数,而这种方法转换过来的char*没法用。。。只是看上去一模一样而已
离线jdwx

只看该作者 3楼 发表于: 2012-01-04
回 楼主(x_y_x) 的帖子
QString str = "ABC";
qDebug()<<strcmp(str.toStdString().c_str(),"ABC");
这样估计可以。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线dbzhang800

只看该作者 4楼 发表于: 2012-01-04
引用楼主x_y_x于2012-01-03 22:09发表的 qstring转char* :
我在DIALOG中有一个LINEEDIT名为edt,然后我用如下代码想将QString转换为char*
    char *p;
    QString q;
    q=ui->edt->text();
    p=q.toLocal8Bit().data();
.......

这儿用到一个临时变量,导致该语句结束时,p 已经是野指针了
离线zsmdev
只看该作者 5楼 发表于: 2012-01-04
char p[256];
sprintf(p, q.toLocal8Bit().data());
if(0==strcmp(q, "hello"))
{
printf("%s", p);
}
或者干脆你直接传q.toLocal8Bit().data()给那个函数
离线x_y_x
只看该作者 6楼 发表于: 2012-01-04
回 4楼(dbzhang800) 的帖子
q我换成了全局变量。。问题依然存在
离线x_y_x
只看该作者 7楼 发表于: 2012-01-04
将qstring转成char*没有问题,问题在于函数不认这个char*,我把p[0]到p[4]都显示出来的确是hello,包括我使p[5]='\0',再传给函数,依然没用。。。
离线x_y_x
只看该作者 8楼 发表于: 2012-01-04
回 4楼(dbzhang800) 的帖子
非常感谢,的确是您说的这样,我改成全局变量之后,忘记删掉函数里定义的局部变量了,删掉之后就好了,非常感谢~
离线dbzhang800

只看该作者 9楼 发表于: 2012-01-05

q我换成了全局变量。。问题依然存在
p=q.toLocal8Bit().data();

可能你理解错我的意思了,我不是说你的q是临时变量,而是你的.toXXXX 会产生一个临时的QByteArray变量
快速回复
限100 字节
 
上一个 下一个