C ++ fstream.write分段错误

时间:2017-09-20 14:55:46

标签: c++ sqlite fstream binary-data

我正在尝试将二进制数据写入文件,我得到分段错误。我从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();
}

1 个答案:

答案 0 :(得分:1)

sqlite3_exec()只是preapre / step / finalize循环的包装。

sqlite3_exec() documentation说:

  

sqlite3_exec()回调的第三个参数是一个指向字符串的指针数组,就好像来自sqlite3_column_text(),每列一个。

该文件说:

  

这些例程只有在最近一次sqlite3_step()的电话回复SQLITE_ROW且后来都没有调用sqlite3_reset()sqlite3_finalize()时才会调用。如果在sqlite3_reset()sqlite3_finalize()之后或sqlite3_step()之后返回SQLITE_ROW之外的其他内容时调用了这些例程中的任何一个,则结果将是未定义的。

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