我试图将二进制数据写入文件,我会得到分割错误。我从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以外的其他内容后调用的,则结果是未定义的。
换句话说:回调返回后,字符串消失了;您必须复制字符串的内容。