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);
      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';

猜你喜欢

转载自www.cnblogs.com/Stephen-Qin/p/13184760.html
今日推荐