10-04-2007, 01:35 PM
Buenos dias tengan todos
Vengo con un problema punteros, en realidad soy nuevo en el tema de punteros y creo que es un tema complicado pero muy interesante, ahora necesito hacer un programa en C que mande parametros a una funcion de mysql, la funcion de mysql "conexion" la he creado en una libreria con tal de poder utilizarla en distintos programas, es necesario mediante un programa en C mandar parametros punteros a la funcion de conexion, la funcion los toma y los usa para conectarse a mysql y regresar la conexion para poder cerrarla en otra funcion de la libreria. Los parametrso ya los puedo mandar, pero al compilar me marca warning sin embargo se crea el ejecutable y funciona bien en la conexion, me gustaria quitar los warnings y de la funcion "conexion" devolver la variable que contiene la conexion "conn" para en mi programa en C cerrarla llamando una funcion de "desconectar", mas explicito les mando el codigo de la libreria y de mi programa.
libreria:
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
char conexionserv(char* servidor,char* usuario,char* contrasena,char* basededatos)
{
MYSQL *conn;
conn = mysql_init(NULL);
/* Conexion a la base de datos */
if (!mysql_real_connect(conn, servidor,
usuario, contrasena, basededatos, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
printf("Error en la conexion\n");
exit(1);
}
else
{printf("Se ha conectado al servidor\n");}
return conn;
}
MYSQL desconectar(MYSQL *desc)
{
mysql_close(desc);
printf("Se cerro la conexion");
}
Esas son las funciones ke deseo manejar en mi programa en C que estan en mi libreria, y el programa en C kedaria algo asi:
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#include <conexion.h>
main()
{
MYSQL *conn2;
char* servidor[20];
char* usuario[20];
char* contrasena[20];
char* basededatos[20];
conn = mysql_init(NULL);
printf("Prueba de conexion al server\n");
printf("Host al que se desea conectar: ");
scanf("%s",servidor);
printf("Usuario: ");
scanf("%*c%[^\n]",usuario);
printf("Password del usuario: ");
scanf("%*c%[^\n]",contrasena);
printf("Base de datos que se desea conectar: ");
scanf("%*c%[^\n]",basededatos);
printf("\n");
conn2=conexionserv(servidor,usuario,contrasena,basededatos);
printf("conexion: %p\n",conn2);
desconectar(conn2);
return 0;
}
Problemas:
1.-cuando mando parametros a conexionserv() al compilar me marca warning passing arg 1 of 'conexionserv' incompatible pointer type, warning passing arg 2 of 'conexionserv' incompatible pointer type,y asi con los 4 parametros, sin embargo se genera el ejecutable y se conecta al servidor correctamente.
2.-Al compilar mi libreria me marca un
warning: return makes integer from pointer without a cast, sin embargo se genera la libreria correctamente.
3.-cuando se obtiene conn2 en el main no hay problemas pero al momento de mandarlo al desconectar() me aparece el problema segmentation fault y no se desconecta.
Alguien que conozca de punteros tipo mysql y me pueda ayudar se lo agradeceria mucho.
Vengo con un problema punteros, en realidad soy nuevo en el tema de punteros y creo que es un tema complicado pero muy interesante, ahora necesito hacer un programa en C que mande parametros a una funcion de mysql, la funcion de mysql "conexion" la he creado en una libreria con tal de poder utilizarla en distintos programas, es necesario mediante un programa en C mandar parametros punteros a la funcion de conexion, la funcion los toma y los usa para conectarse a mysql y regresar la conexion para poder cerrarla en otra funcion de la libreria. Los parametrso ya los puedo mandar, pero al compilar me marca warning sin embargo se crea el ejecutable y funciona bien en la conexion, me gustaria quitar los warnings y de la funcion "conexion" devolver la variable que contiene la conexion "conn" para en mi programa en C cerrarla llamando una funcion de "desconectar", mas explicito les mando el codigo de la libreria y de mi programa.
libreria:
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
char conexionserv(char* servidor,char* usuario,char* contrasena,char* basededatos)
{
MYSQL *conn;
conn = mysql_init(NULL);
/* Conexion a la base de datos */
if (!mysql_real_connect(conn, servidor,
usuario, contrasena, basededatos, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
printf("Error en la conexion\n");
exit(1);
}
else
{printf("Se ha conectado al servidor\n");}
return conn;
}
MYSQL desconectar(MYSQL *desc)
{
mysql_close(desc);
printf("Se cerro la conexion");
}
Esas son las funciones ke deseo manejar en mi programa en C que estan en mi libreria, y el programa en C kedaria algo asi:
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#include <conexion.h>
main()
{
MYSQL *conn2;
char* servidor[20];
char* usuario[20];
char* contrasena[20];
char* basededatos[20];
conn = mysql_init(NULL);
printf("Prueba de conexion al server\n");
printf("Host al que se desea conectar: ");
scanf("%s",servidor);
printf("Usuario: ");
scanf("%*c%[^\n]",usuario);
printf("Password del usuario: ");
scanf("%*c%[^\n]",contrasena);
printf("Base de datos que se desea conectar: ");
scanf("%*c%[^\n]",basededatos);
printf("\n");
conn2=conexionserv(servidor,usuario,contrasena,basededatos);
printf("conexion: %p\n",conn2);
desconectar(conn2);
return 0;
}
Problemas:
1.-cuando mando parametros a conexionserv() al compilar me marca warning passing arg 1 of 'conexionserv' incompatible pointer type, warning passing arg 2 of 'conexionserv' incompatible pointer type,y asi con los 4 parametros, sin embargo se genera el ejecutable y se conecta al servidor correctamente.
2.-Al compilar mi libreria me marca un
warning: return makes integer from pointer without a cast, sin embargo se genera la libreria correctamente.
3.-cuando se obtiene conn2 en el main no hay problemas pero al momento de mandarlo al desconectar() me aparece el problema segmentation fault y no se desconecta.
Alguien que conozca de punteros tipo mysql y me pueda ayudar se lo agradeceria mucho.
