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_表已经提供的功能。也许随着我对他的理解越来越好,我可以放弃不推荐的版本,但现在看来这要容易得多。