我正在尝试让 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”函数上,因为如果我注释该行,则不会出现段错误。
提前谢谢您!
最佳答案
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);
关于c - 使用 SQLite3 和 C 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913214/