尝试连接到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]’
非常感谢
莫罗
答案 0 :(得分:3)
你可以这样做:
scanf("%s", user_name);
scanf("%s", passwd);
但这不是一个好主意。请改用fgets
。查看您的手册页。有关详细信息,请尝试让人们有动力回答您的问题。
答案 1 :(得分:2)
scanf()
- 如果我的名字长度超过10个字符(或者我只是想打破您的程序),则scanf()
来电将超出阵列。请改用scanf("%9s", user_name);
(我认为您需要在最后为'\0'
留出空间。)答案 2 :(得分:0)
用户名和密码已经是数组,所以你应该摆脱“&amp;”使用scanf时。
答案 3 :(得分:-1)
我通过使用strlen来解决问题...我通过strlen检查输入,如果它大于指定的数组大小,则合适的警告会阻止用户继续...你觉得这是个好主意吗?