2011-07-04 19 views
1

我使用Ansi C和sqlite3_get_table;一切正常,除非我无法访问作为指向数组的指针传递的查询结果向量。这是我的代码...从sqlite3_get_table访问结果数组

char **sql_results; 

sqlite3_get_table(open_database, sql_query, 
     &sql_results, &RecordCount, &ColumnCount, &error_msg); 

for (int i = 0; i <= (RecordCount + 1)* (ColumnCount); i++) 
    printf("%10d %10s\n",i, sql_results[i]); //get "EXC BAD ACCESS" message 

我该如何修复sql_results[i]?谢谢。

+0

您知道这只适用于小型表格,而对于大型表格,您最好手动进行查询,以便您可以一步一步地完成该操作。 –

回答

2

我觉得这片:

i <= (RecordCount + 1)* (ColumnCount) 

是造成你的问题。你也可以尝试

i < (RecordCount + 1)* (ColumnCount) 
+0

+1:另一个可能的问题是值是UTF-8,但我认为这不太可能。 –

+0

fyr。答对了!循环是你所建议的问题,而不是变量。我改变了测试只LT,它的工作。谢谢。 – MonkeyBusiness

1

你应该检查由sqlite3_get_table返回的值是SQLITE_OK;如果不是,则访问结果表并不安全。

您还应该知道,这是一个deprecated API。你应该添加一个电话sqlite3_free_table释放内存;现在你似乎有内存泄漏(或者你已经这样做了,但拒绝向我们显示)。

+0

好的建议。我只显示了我认为与问题相关的代码,但我确实忘记了free_table。谢谢。 – MonkeyBusiness