1 Qt用fopen写文件时候中文路径解析失败解决办法!
需要头文件<QTextCodec>
#include <QTextCodec>
getMapFilePath = QFileDialog::getExistingDirectory(this,tr("文件对话框!"), "C:");
QTextCodec *code = QTextCodec::codecForName("GB2312");
std::string name = code->fromUnicode(getMapFilePath).data();
FILE *fpw=fopen(name.c_str(),"wb");
if(fpw==nullptr){
qDebug()<<"error rfopen"<<endl;
}
2 Qt中QString::toStdString().c_str() 偶尔存在问题
假设
QString str = "string";
const char* c = str.toStdString().c_str()
单步调试显示的结果可能会是’\0’
而当我这样写时
std::string s = str.toStdString();
const char* c = s.c_str();
c 是"string"
为啥呢???
原来有可能是这样的。
str.toStdString().c_str()
中toStdString()
是一个临时std::string
变量,而c_str()
是指向这个临时std::string
变量的字符串地址,所以传给c时这个临时std::string变量已经被析构,其内容是空,c_str()自然就是’\0’。不过这种情况在未知情况下发生,有时直接写QString::toStdString().c_str()
也是好用的。
为了避免出错,最好还是
std::string s = str.toStdString();
const char* c = s.c_str();
这样写比较好。
多写几个字,少出点错,下次记住了!