结论:
int aa = str.toUtf8().length(); //这个一个汉字是3个自己
int aa1 = str.toLocal8Bit().length();//这个一个汉字是2个自己
这个问题是类似如下代码发现问题的坑
char* name[len]; int i =0;
for( i=0;i< len;i++) { char *pTem = new char[list[i].toLocal8Bit().length()+1]; strcpy(pTem,list[i].toStdString().c_str()); name[i] = pTem;
int dsd = strlen(list[i].toStdString().c_str()); int ddd = strlen(pTem);//这2个str.toLocal8Bit().length()长度一样
}
//使用name 干了点事情 for( i=0;i< len;i++) { delete[] name[i] ;//这release本本崩溃,debug版本运行 也崩溃 }
debug 调试提示“Heap block at 0000000053DF1460 modified at 0000000053DF14CC past requested size of 5c”
我使用前和使用后打印 name[len] 没有变化。 猜测 name[i] 申请的长度不对。 就设置一个稍大的值1000, 测试没有问题。最后怀疑 没测试得出结论