c - 使用 SQLite3 和 C 的段错误

标签 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”函数上,因为如果我注释该行,则不会出现段错误。

提前谢谢您!

最佳答案

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/

相关文章:

android - Android 上的 PyAudio

c++ - 从 url 获取 GET 变量时遇到问题

c - 为什么这不起作用?[链接列表]

Android - 在查询后保留照片的 ID 并将数据保存到数据库中

c++ - 用于模拟 Spring 运动的代码中的段错误

c - 如何使用指针在声明后更改变量

python - 覆盖用于测试的 SQLAlchemy 列

android - 使用 sqlite 将字符串中的单词替换为另一个单词

c - free() 上的段错误指向 char* 的指针

c++ - 如何调试 OpenGL 程序?