赋值使指针整数不带强制转换

时间:2012-02-18 07:44:44

标签: mysql c

你好,我已经编写了一个连接到mysql服务器的c程序,并从只有一个查询的文本文件中执行sql查询。

#include <mysql.h>
#include <stdio.h>
main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "127.0.0.1";
char *user = "root";
char *password = "PASSWORD"; /* set me first */
char *database = "har";
conn = mysql_init(NULL);

char ch, file_name[25];
char *ch1;
FILE *fp;

printf("Enter the name of file you wish to see ");
gets(file_name);

fp = fopen(file_name,"r"); // read mode

if( fp == NULL )
{
perror("Error while opening the file.\n");
exit(0);
}

while( ( ch = fgetc(fp) ) != EOF )
printf("%c",ch);


ch1=ch;


/* Connect to database */
if (!mysql_real_connect(conn, server,
NULL , NULL, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(0);
}


printf("%c",ch);


/* send SQL query */
if (mysql_query(conn, ch1)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(0);
}
res = mysql_use_result(conn);
/* output table name */
printf("MySQL Tables in mysql database:\n");
while ((row = mysql_fetch_row(res)) != NULL)
printf("%s \n", row[0]);
/* close connection */
mysql_free_result(res);
mysql_close(conn);
fclose(fp);
}

我无法理解我哪里出错了...... 提前谢谢......

2 个答案:

答案 0 :(得分:2)

这是造成问题的原因: CH1 = CH;

ch1是指向一个字符的指针,而ch是一个字符。

您是否打算将从fp读取的字节存储在ch1指向的char数组中?你正在做的是,每次在while循环中你都在使用fgetc将它存储在ch中并打印它。

然后,当while循环结束时,您将char指定给char指针。我不确定你是怎么做的。但这肯定会导致问题。

答案 1 :(得分:2)

你在很多方面出错:

  1. 您不会为main声明返回类型或参数。
  2. 您正在使用gets。永远不要使用gets,甚至不要考虑。请改用fgets
  3. fgetc会返回int,而不是char,因此您的ch应为int。在你解决这个问题之前,你无法识别EOF。
  4. 您已声明char chchar *ch1,但已将ch分配给ch1。这就是标题中的错误来自的地方。
  5. 您的代码似乎尝试一次一个字节地将SQL提供给MySQL,并且不会做任何有用的事情。我认为您使用fgets一次读取一行SQL文件意味着您可以将每行作为单个SQL语句提供给MySQL。
  6. 您应该花一些时间阅读有关编译器警告开关的信息