使用SQLite3和C进行分段错误

时间:2013-02-16 17:46:28

标签: c sqlite segmentation-fault

我正在尝试使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”函数上,因为如果我评论该行,则没有分段错误。

提前谢谢!

1 个答案:

答案 0 :(得分: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);