要动态打开文件,我正在传递QString完整路径。 如果作为变量传递,则代码将失败。 如果直接输入(而不是通过变量输入),则一切正常。这是怎么回事?
QString outputfile_qstring("C:/temp/out.mp3");
qDebug()<<"Original output file " << outputfile_qstring;
const char* outputfile = outputfile_qstring.toLatin1().constData();
qDebug()<<"Trying to open output file " << outputfile;
fout = fopen(outputfile, "wb+");
bool fileIsOpen = (fout != 0);
if ( !fileIsOpen ){
errStr_ = "Error opening the output file " + outputfile_qstring;
Q_ASSERT(false && "Could not open output file");
return false;
}
从QString到const char *的转换始终失败。
Original output file "C:/temp/out.mp3"
Trying to open output file ????????????????????????aSC,_??r
答案 0 :(得分:3)
问题在这里:
const char* outputfile = outputfile_qstring.toLatin1().constData();
toLAtin1
函数通过值返回QByteArray
。而且由于您不保存该对象,因此表达式完成后它将被破坏,从而使outputfile
成为指向不存在数据的无效指针。
简单的解决方案是在对outputfile_qstring.toLatin1().constData()
的调用中直接使用表达式fopen
。是否完全不使用fopen
和C文件功能,而仅使用Qt文件。