【发布时间】:2015-07-02 18:42:21
【问题描述】:
我正在尝试将std::vector<std::string> 传递给void*,以便在需要将void* 传递给它的回调函数中使用。回调是 sqlite_exec 回调。但是,将vec 转换为void* 时出现段错误。那么如何将std::vector<std::string> 传递给这样的回调呢?
static int cb_vector(void* vec, int argc, char**argv, char**colNm){
std::vector<std::string>* myvec = (std::vector<std::string>*)vec;
for(int i = 0; i < argc; i++){
myvec->push_back(argv[i]);
}
return 0;
}
std::vector<std::string> myfunc(){
std::vector<std::string> vec;
int rc = sqlite3_exec(_db, SQL, cb_vector, (void*)&vec, NULL);
return vec;
}
我已经查看了以下资源,但他们没有回答我的问题。
【问题讨论】:
-
但是您的代码已经正确执行了。如果这不起作用,那么你必须先解释它有什么问题。
-
您是否收到错误或意外结果?
-
您应该确保在调用回调函数时
vec仍然在作用域内。否则我看不出你的代码有什么问题。 -
有什么问题?
-
@HSchmale 你没有得到那个演员的段错误,这是一个没有动作的句法语句。而且您最好使用 C++ 强制转换而不是 C 强制转换,并且您不需要将 &vec 强制转换为
void *