2014-01-06 24 views
0
#include<stdio.h> 
#include<stdlib.h> 
#include<mysql/mysql.h> 
int main() 
{ 
    char *tempry; 
    tempry = (char *) malloc(20*sizeof(char)); 
    sprintf(tempry,"hello"); 
    printf("\n%s\n",tempry); 
    /* Here i can use mysql connectivity code */ 
    return 0; 
} 

當我使用這個gcc test.c -o test -g GCC編譯命令,然後它會給我輸出分割故障時添加MySQL客戶端libarary

hello 

,如果我用這個gcc -I/usr/local/include -L/usr/lib64/mysql -lmysqlclient test.c -o test -g線上,那麼它將給我這個segmenation fault error line

tempry = (char *) malloc(20*sizeof(char)); 
+0

你並不需要強制轉換malloc的回報,沒有(字符*) – user2760375

+0

使用您發佈的代碼,而無需任何SQL的東西是好的(如果不是在談論長度檢查,或免費或類似的東西),其他地方出了問題。 – moeCake

+0

在命令行結尾處輸入-l選項:I.e. gcc -g -o test test.c -I/usr/local/include -L/usr/lib64/mysql -lmysqlclient – Marian

回答

0

檢查您的mysql_real_connect()。您可能將NULL的值傳遞給mysql_real_connect()

mysql_init() return NULL when it fail。那麼你可以將這個NULL傳遞給mysql_real_connect(),這樣就導致segmentation fault

mysql_init() Reference page

+0

這只是在黑暗中的野生刺。 OP沒有發佈任何表明這是問題的代碼。我知道,它可能是OP寫了類似'MYSQL * db = mysql_init(NULL);如果(!db)fprintf(stderr,「連接失敗」); mysql_close(db);'< - 沒有大括號,因此連接也成功關閉,並且下面的代碼導致段錯誤 –

+0

@EliasVanOotegem這是我使用'mysql' API時出現的一個錯誤。他的編譯方法是正確的,所以我認爲這可能是問題。 – sujin

+0

他將路徑傳遞給lib,但是他沒有將任何cflags傳遞給gcc,這就是爲什麼我建議操作使用'mysql_config --libs --cflags'來代替。 –