код предупреждения C (подключение к Mysql db) - PullRequest
0 голосов
/ 15 сентября 2011

Я получаю некоторые раздражающие предупреждения при попытке подключиться к базе данных 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 ]

3 голосов
/ 15 сентября 2011

Вы можете сделать это так:

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

Но это не очень хорошая идея.Вместо этого используйте fgets.Проверьте свою страницу руководства.А для более подробной информации постарайтесь мотивировать людей отвечать на ваши вопросы.

2 голосов
/ 15 сентября 2011
  1. Что сказал мозг.
  2. Вы используете scanf() небезопасным способом - если мое имя длиннее 10 символов (или я просто хочу разбить вашу программу), вызов scanf() будет переполнен за пределами массива. Вместо этого используйте scanf("%9s", user_name); (я думаю, вам нужно оставить место для '\0' в конце).
0 голосов
/ 16 сентября 2011

Я решил проблему с помощью strlen ... Я проверяю ввод через strlen, и если он больше указанного размера массива, соответствующее предупреждение не позволяет пользователю продолжить ... Как вы думаете, это хорошая идея?

0 голосов
/ 15 сентября 2011

username и passwd уже являются массивами, поэтому вы должны избавиться от «&» при использовании scanf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...