C FSTREAM.WRITE分割故障

C++ fstream.write segmentation fault

本文关键字:故障 分割 WRITE FSTREAM      更新时间:2023-10-16

我试图将二进制数据写入文件,我会得到分割错误。我从sqlite blob获得二进制数据。我需要有关此代码的一些帮助。错误爆炸在写命令上。sqlite回调:

    static int callback(void* object, int, char** data, char**)
{
    if (fromdb* const art= static_cast<fromdb*>(object))
    {
        art->title = *data[1];
        art->creator = *data[2];
        art->bin = data[3];
        art->year = *data[4];
    }
    return 0;
}

写功能:

    void write() {
    // << bin;
    ofstream towrite;
    string name;
    cout << "Podaj nazwe pliku do zapisu";
    cin >> name;
    towrite.open(name, ios::out | ios::binary);
    towrite.write(bin, sizeof(bin));
    towrite.close();
}

sqlite3_exec()只是围绕preapre/step/pinalized loop的包装器。

sqlite3_exec()文档说:

sqlite3_exec()回调的第三个参数是字符串的一系列指示,就像从sqlite3_column_text()获得的字符串,每列一个。

该文档说:

这些例程只能在返回sqlite3_step()的最新调用sqlite_row,而sqlite3_reset()和sqlite3_finalize()均未被调用。如果这些例程中的任何一个是在sqlite3_reset()或sqlite3_finalize()或sqlite3_step()返回SQLite_row以外的其他内容后调用的,则结果是未定义的。

换句话说:回调返回后,字符串消失了;您必须复制字符串的内容。