繁体   English   中英

从QString开始使用const char *是不可能的

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM