2017-09-20 27 views
-1

我正在尝试将二进制数据写入文件,并且出现分段错误。我从sqlite blob获取二进制数据。 我需要一些帮助这个代码。 写入命令错误。 sqlite的回调:C++ fstream.write分段错误

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

你有很多指针 - 它们指向什么?分段错误的一个常见原因是它们没有指向任何地方(未初始化) –

+0

我试图理解你的回调函数的输入,无法理解任何东西。 – ssovukluk

+0

try art-> bin = * data [3]; ? – ssovukluk

回答

1

sqlite3_exec()只是围绕preapre /步进/敲定循环的包装。

sqlite3_exec() documentation说:

的第三参数给sqlite3_exec()回调是一个指针数组,以获得弦仿佛从sqlite3_column_text(),每列一个。

这文件说:

当最近到sqlite3_step()调用返回SQLITE_ROW既不sqlite3_reset()也不sqlite3_finalize()随后已经呼吁这些程序可能只被调用。如果在sqlite3_reset()sqlite3_finalize()之后或在sqlite3_step()返回SQLITE_ROW以外的值之后调用这些例程中的任何一个,则结果是不确定的。

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