ANSI C和sqlite3_get_table:如何将结果数组传递回调用函数?

时间:2011-07-03 01:39:33

标签: c arrays sqlite

我正在尝试传递由sqlite3_get_table生成的结果数组 在另一个函数调用的函数中。除了我,一切都很好 无法将数组返回main函数。究竟我该取代什么? char **sql_results与?这是代码:

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);

}

1 个答案:

答案 0 :(得分:0)

你试图获取其中一个sql_select_table参数的地址,但这并不符合你的想法; &sql_results只是局部变量的地址,不允许您修改sql_results中的main()

相反,将char***传递给sql_select_table,如下所示:

/* 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"

}

此外,不推荐使用sqlite3_get_table

  

这是为保持向后兼容性而保留的旧版界面。建议不要使用此界面。

因此,您可能希望开始使用sqlite3_exec