从https://taglib.github.io/下载taglib 1.9并使用INSTALL文件中提供的说明进行编译。
以下代码崩溃并显示错误“程序意外完成。”
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <taglib/mp4file.h>
#include <taglib/mpegfile.h>
#include <taglib/fileref.h>
#include <taglib/taglib.h>
#include <taglib/tag.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TagLib::FileName fn(QString("C:/Users/Bill/Desktop/02 Am I Wrong.mp3").toStdString().c_str());
TagLib::FileRef ref(fn);
qDebug() << QString::fromStdString(std::string(ref.tag()->artist().toCString()));
return a.exec();
}
在调试模式下运行,在
处显示null dereference fileref.cppbool FileRef::isNull() const
{
return !d->file || !d->file->isValid();
}
使用静态内置Qt 5.0.2运行Windows 10内幕预览
我辛苦劳作,没有找到任何有用的结果。
答案 0 :(得分:1)
QString.toStdString()..c_str()
返回的指针仅在QString对象仍然存在时有效。在您的情况下,仅在您创建它的行上
所以要么保留对QString的引用,要么根本不使用QString。
TagLib::FileRef ref("C:/Users/Bill/Desktop/02 Am I Wrong.mp3");
qDebug() << ref.tag()->artist().toCString();
此外,您应该添加一些错误检查。这是一个不使用qt的例子:
#include <taglib/fileref.h>
#include <taglib/taglib.h>
#include <taglib/tag.h>
int main(int argc, char *argv[])
{
TagLib::FileRef ref("./Falco Benz - Hat Tricks (Original Mix).mp3");
if(!ref.isNull() && ref.tag() != NULL) {
std::cout << ref.tag()->artist().toCString() << std::endl;
}
}
如果我省略错误检查,并且文件不存在,我会收到段错误。