[英]fopen with const char * from QString not possible
要动态打开FILE,我传递的是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;
}
const char *转换的QString总是失败。
Original output file "C:/temp/out.mp3"
Trying to open output file ????????????????????????aSC,_??r
问题出在这里:
const char* outputfile = outputfile_qstring.toLatin1().constData();
toLAtin1
函数按值返回QByteArray
。 并且由于您不保存该对象,因此在表达式完成后将对其进行破坏,使得outputfile
成为指向不存在的数据的无效指针。
简单的解决方案是在调用fopen
直接使用表达式outputfile_qstring.toLatin1().constData()
。 或者根本不使用fopen
和C文件功能,只使用Qt文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.