QString转化为char *的方式

Qt帮助文档中给的一个demo

QString tmp = "test";
QByteArray text = tmp.toLocal8Bit();
char * pCh = new char[text.size()+1];
strcpy(pCh, text.data());
delete [] data;

 

别的文章中也给出了一些方法

   char *chStr = NULL;
   QByteArray ba = str.toLatin1();
   chStr = (char *)malloc(ba.length() + 1);
   memset(chStr, 0, ba.length());
   memcpy(chStr, ba.data(), ba.length());
   chStr[ba.length()] = '\0';

上面的代码可以进一步优化

   char *chStr = NULL;
   QByteArray ba = str.toLatin1();
   chStr = (char *)malloc(ba.length() + 1);
   memset(chStr, 0, ba.length() + 1); //既然分配了这么多就全memset掉,官方帮助文档没有使用memset,估计是它分配的内存全部给用上了。人家有这个自信~
   memcpy(chStr, ba.data(), ba.length() + 1);//既然ba.data()的最后也是‘\0’,就直接全拷贝好了

 

ps:

说到new之后memset,可以采用更简单的方式来实现:

char *p = new char[10]();

它等价于

char *p = new char[10];
memset(p, 0, 10);
posted @ 2020-06-23 21:42  心媛意码  阅读(774)  评论(0编辑  收藏  举报