2013-02-16 91 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