ANSI C和sqlite3_get_表:如何将结果数组传递回调用函数?
我试图传递由包含的ANSI C和sqlite3_get_表:如何将结果数组传递回调用函数?,c,arrays,sqlite,C,Arrays,Sqlite,我试图传递由包含的sqlite3\u get\u表生成的结果数组 在另一个函数调用的函数中。除了我,一切都很好 无法将数组返回到main函数中。我到底要更换什么 char**sql\u结果with?代码如下: int main() { char **sql_results = 0; // help here sql_select_table("GetAirports", query_string, AIRPORTS_DATABASE, sql_resu
sqlite3\u get\u表生成的结果数组
在另一个函数调用的函数中。除了我,一切都很好
无法将数组返回到main
函数中。我到底要更换什么
char**sql\u结果
with?代码如下:
int main()
{
char **sql_results = 0; // help here
sql_select_table("GetAirports", query_string, AIRPORTS_DATABASE,
sql_results, &RecordCount,
&ColumnCount);
for (int i = 0; i < ColumnCount; i++)
printf("%s\n", sql_results[i]); // Generates "EXC_BAD_ACCESS"
}
void sql_select_table(const char *query_name, const char *sql_query,
const char *sql_database,
char **sql_results, int *RecordCount,
int *ColumnCount)
{
sqlite3_get_table(open_database, sql_query,
&sql_results, RecordCount,
ColumnCount, &error_msg);
}
intmain()
{
char**sql\u results=0;//此处有帮助
sql\u选择表(“GetAirports”、查询字符串、AIRPORTS\u数据库、,
sql_结果和记录计数,
&列数);
对于(int i=0;i
您试图获取一个sql\u select\u表
参数的地址,但这并不是您所认为的那样&sql\u results
只是局部变量的地址,它不允许您在main()
中修改sql\u results
相反,将char***
传递到sql\u select\u表中,如下所示:
/* Note that sql_results is now a char*** */
void sql_select_table(const char *query_name, const char *sql_query,
const char *sql_database,
char ***sql_results, int *RecordCount,
int *ColumnCount)
{
sqlite3_get_table(open_database, sql_query,
sql_results, RecordCount,
ColumnCount, &error_msg);
}
int main()
{
char **sql_results = 0;
/* Note the & on sql_results */
sql_select_table("GetAirports", query_string, AIRPORTS_DATABASE,
&sql_results, &RecordCount,
&ColumnCount);
for (int i = 0; i < ColumnCount; i++)
printf("%s\n", sql_results[i]); // Generates "EXC_BAD_ACCESS"
}
/*请注意,sql\u结果现在是一个字符****/
无效sql\u选择表(常量字符*查询\u名称,常量字符*sql\u查询,
const char*sql_数据库,
字符***sql_结果,int*记录计数,
int*列计数)
{
sqlite3_获取_表(打开_数据库、sql_查询、,
sql_结果、记录计数、,
列计数和错误消息);
}
int main()
{
字符**sql\u结果=0;
/*注意关于sql\u结果的(&O)*/
sql\u选择表(“GetAirports”、查询字符串、AIRPORTS\u数据库、,
&sql_结果和记录计数,
&列数);
对于(int i=0;i
此外,还不推荐使用:
这是为向后兼容而保留的旧接口。不建议使用此接口
因此,您可能需要开始使用。对不起,Monkey,在代码块中无法获得粗体格式。我把它全部删掉是为了让它更容易阅读,我希望没有粗体字不会让这个问题更难理解。穆,这行得通!我花了好几个小时想弄到这个,非常感谢你的帮助。我从sqlite3_exec开始,但发现我正在开发的所有回调例程都只是试图实现get_表已经提供的功能。也许随着我对他的理解越来越好,我可以放弃不推荐的版本,但现在看来这要容易得多。