警告C代码(连接到Mysql db)

时间:2011-09-14 21:46:40

标签: 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]’

非常感谢

莫罗

4 个答案:

答案 0 :(得分:3)

你可以这样做:

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

但这不是一个好主意。请改用fgets。查看您的手册页。有关详细信息,请尝试让人们有动力回答您的问题。

答案 1 :(得分:2)

  1. 大脑说什么。
  2. 您正在以不安全的方式使用scanf() - 如果我的名字长度超过10个字符(或者我只是想打破您的程序),则scanf()来电将超出阵列。请改用scanf("%9s", user_name);(我认为您需要在最后为'\0'留出空间。)

答案 2 :(得分:0)

用户名和密码已经是数组,所以你应该摆脱“&amp;”使用scanf时。

答案 3 :(得分:-1)

我通过使用strlen来解决问题...我通过strlen检查输入,如果它大于指定的数组大小,则合适的警告会阻止用户继续...你觉得这是个好主意吗?