无法从QString使用const char * fopen

时间:2018-07-08 13:35:14

标签: c++ qt

要动态打开文件,我正在传递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

1 个答案:

答案 0 :(得分:3)

问题在这里:

const char* outputfile = outputfile_qstring.toLatin1().constData();

toLAtin1函数通过值返回QByteArray 。而且由于您不保存该对象,因此表达式完成后它将被破坏,从而使outputfile成为指向不存在数据的无效指针。

简单的解决方案是在对outputfile_qstring.toLatin1().constData()的调用中直接使用表达式fopen。是否完全不使用fopen和C文件功能,而仅使用Qt文件。