QString 和 char *之间如何如何转换?

如下代码将QString转换为char *:   

 int main(int argc, char **argv)

    {

      QApplication app(argc, argv);

      QString str1 = "Test";

      QByteArray ba = str1.toLocal8Bit();

      const char *c_str2 = ba.data();

      printf("str2: %s", c_str2);

      return app.exec();

    }

在调用data()之前,请先将QString保存到QByteArray中,如果直接使用如下方式:

constchar*c_str2 = str2.toLocal8Bit().data();

可能导致程序崩溃,因为此时QByteArray对象并不存在,toLocal8Bit()只是返回了一个临时的对象,很快就会销毁,导致c_str2引用了错误的内存。

如下代码将char *转换为QString:

QStringstring = QString(QLatin1String(c_str2));

QStringstring = QString::fromLocal8Bit(c_str2);

如果包含中文,请使用第二种方式,避免乱码。

使用printf打印QString字符串,可采用如下方式:

printf("str2: %s",qPrintable(str1));

 

QByteArray拷贝到char的内存中时,注意,在为char指针非配内存时,需要为QByteArray对象的结束符\0也分配内存,如下代码可能导致程序崩溃:

QString tmp = "test";

QByteArray text = tmp.toLocal8Bit();

char *data = new char[text.size()]

strcpy(data, text.data());

delete [] data;

正确方式:

QString tmp = "test";

QByteArray text = tmp.toLocal8Bit();

char *data = new char[text.size() + 1]

strcpy(data, text.data());

delete [] data;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值