2011-09-14 42 views
0

嘗試連接到Mysql數據庫時,出現一些煩人的警告。警告C代碼(連接到Mysql數據庫)

下面的代碼:

#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <mysql/mysql.h> 
#include <string.h> 

const char* host = "localhost"; 
char *database="Dbis_RG"; 
char user_name[10]; 
char passwd[10]; 

MYSQL_ROW row; 
MYSQL_RES* result; 
MYSQL_FIELD* field; 

int main() 
{ 

    system("clear"); 


    printf("Insert yur user name: \n"); 
    scanf("%s", &user_name); 

    printf("Insert your passwd: \n"); 
    scanf("%s", &passwd); 


    MYSQL *conn; 

    conn = mysql_init(NULL); 


    /* Connection to database */ 
     if (!mysql_real_connect(conn, host, 
      user_name, passwd, database, 0, NULL,CLIENT_MULTI_STATEMENTS)) { 
      fprintf(stderr, "%s\n", mysql_error(conn)); 
      exit(EXIT_SUCCESS); 
      } 



     printf ("Connection successful.\n"); 


} 

事實上我得到這些警告的問題,但我不明白我怎麼能擺脫他們:

1.0.c: In function ‘main’: 
1.0.c:23: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[10]’ 
1.0.c:26: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[10]’ 

非常感謝你

莫羅

+9

Hello @Mauro!我們非常興奮,您正在參與堆棧溢出。但是,我們注意到,您在過去向我們提出了幾個問題,但沒有接受任何答案。 **你會回去接受你以前的問題的答案嗎?**你可以通過點擊綠色的選中標記來做到這一點。 –

回答

0

的用戶名和passwd已經數組,所以你應該擺脫的「&「使用scanf時。

+0

他們是數組,而不是指針... – sidyll

+0

稱他們爲你想要的。他們是內存地址:) – brain

+0

@brain:你應該閱讀[c-faq](http://c-faq.com/)的第6部分。一旦你在那裏,也請閱讀其他章節:P – pmg

3

你可以做這樣的:

scanf("%s", user_name); 
scanf("%s", passwd); 

但它不是一個好主意。改爲使用fgets。檢查你的手冊頁。欲瞭解更多詳情,請儘量讓人們有動力回答你的問題。

+0

感謝您的回答。它實際上可行,但你說這不是一個好主意..是否意味着它不是ansi C?如果我使用fgets,它是否以同樣的方式解決問題?謝謝 – Margherita

+0

@Mauro - 請閱讀@ Tomer已經說過的話並解決你的錯誤!他沒有說這不是答案C;他說你寫的是一個安全漏洞,並且很危險。 –

+0

另外,如果您不想使用fgets,則可以通過執行%9s(無空格)或%9c(空格)來限制scanf讀取的字節數爲只讀9個字符,因此scanf(「%9s」 , 用戶名); – thang

2
  1. 大腦說了些什麼。
  2. 您以非安全方式使用scanf() - 如果我的名字長度超過10個字符(或者如果我只是想破壞您的程序),scanf()調用將溢出陣列。改爲使用scanf("%9s", user_name);(我認爲您最後需要爲'\0'留出空間)。
-1

我使用strlen解決了這個問題...我通過strlen檢查輸入,如果它大於指定的數組大小,一個合適的警告可以防止用戶繼續...你認爲這是一個好主意?

+1

不!在scanf之後,如果讀取的字符數多於爲它們保留的空間,則傷害已經完成。警告你無法撤銷傷害。 – pmg