我正在尝试传递由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);
}
答案 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
。