0

私は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」関数にあります。その行にコメントすると、セグメンテーション違反が発生しないためです。

前もって感謝します!

4

1 に答える 1

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

これが問題です。query1文字のメモリのみを予約します。snprintf()の2番目の引数がサイズを指定するのには理由があります。このコードは次のように変更する必要があります。

char query[100];
snprintf(query, sizeof(query), "SELECT start FROM payloads WHERE id=%d", id);
于 2013-02-16T17:49:03.940 に答える