2013-02-16 92 views
0

我试图使C程序工作,我生气了。这是我的代码简化查找错误:使用SQLite3与C分段错误

#include <stdio.h> 
#include <unistd.h> 
#include <sqlite3.h> 

int main(){ 
    sqlite3 *conn; 
    sqlite3_stmt *res; 
    const char *tail, *sqlresult; 
    sqlite3_open("cubecat", &conn); 
    char buffer,query; 
    int id; 

    id= 1; 
    buffer = 'a'; 
    if(buffer == 'a') snprintf(&query,100,"SELECT start FROM payloads WHERE id=%d", id); 

    printf("%s",&query); 
    int error = sqlite3_prepare_v2(conn, &query, 100, &res, &tail); 
    printf("%d",error); 
} 

的错误是完全的“sqlite_prepare_v2”功能,因为如果我评论这一行,没有分段错误。

预先感谢您!

+0

'char *'不一定是指向一个'char'的指针。它可能是一个指向char * **数组的第一个元素的指针。** – 2013-02-16 17:49:44

+0

查询为'char'?也许它必须是'char *' – 2013-02-16 17:50:09

回答

1
char query; 
snprintf(&query,100,"SELECT start FROM payloads WHERE id=%d", id); 

这是出了什么问题。 query只保留一个字符的内存。第二个参数snprintf()指定了尺寸是有原因的。此代码应该如下修改:

char query[100]; 
snprintf(query, sizeof(query), "SELECT start FROM payloads WHERE id=%d", id); 
+0

但是为什么printf(“%s”,&query)起作用呢? – markmb 2013-02-16 17:51:11

+0

@markmb:欢迎来到未定义行为的乐趣世界。 – nneonneo 2013-02-16 17:51:35

+0

@markmb未定义的行为。 – 2013-02-16 17:51:39