我正在尝试将二进制数据写入文件,我得到分段错误。我从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();
}
答案 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之外的其他内容时调用了这些例程中的任何一个,则结果将是未定义的。
换句话说:字符串在回调返回后消失;你必须复制字符串的内容。