PreguntasLinux

Versión Completa: Punteros y MYSQL (solucionado)
Actualmente estas viendo una versión simplificada de nuestro contenido. Para ver la versión completa en el formato correcto, dale click aquí
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.
disculpen en el main me equivoque en la linea conn=mysql_init(null); , ahi va conn2=mysql_init(null); , ya que sino marcaria error que no se ha definido "conn"
Te paso este codigo modificado creo que resuelve el problema chequealo por favor

######################## connecc.h #############################
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>

MYSQL* conexionserv(char* servidor,char* usuario,char* contrasena,char* basededatos);

void desconectar(MYSQL *desc);

#################### connec.cpp ###################################
#include <connecc.h>

MYSQL* 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;
}

void desconectar(MYSQL *desc)

{
mysql_close(desc);
printf("Se cerro la conexion\n");
}

##################### main ##########################
#include <stdio.h>
#include <stdlib.h>
#include </var/lib/mysql/include/mysql/mysql.h>
#include <connecc.h>

int main()
{
MYSQL *conn2;
char servidor[20]="192.168.100.2";
char usuario[20]="adolfo";
char contrasena[20]="adolfo";
char basededatos[20]="parametros";

conn2 = mysql_init(NULL);

conn2=conexionserv(servidor,usuario,contrasena,basededatos);

desconectar(conn2);

return 0;
}
Hola O´NKN

Te agradezco la atencion, la forma de declarar las funciones de tipo MYSQL me marcan el mismo error de segmentation fault, pero eso ya lo resolvi declarando la funcion conexionserv como int y la funcion desconectar como void ya ke no regresa valor alguno, la funcion conexionserv me marca warning: return makes integer from pointer without a cast, sin embargo ya puedo utilizar la variable para desconectar, es decir ya se desconecta, por tanto eso queda resuelto simplemente declarando la funcion conexionserv como tipo int. pero aun quedan los warning tanto de la compilacion de la libreria como el pase de parametros a las funciones, sabes como podria resolver eso?, no es algo que me gustaria que quede en mi programa.
gracias 1-grin
Estimado amigo el codigo que te envie no acusa warnings cuando compilo, sin embargo todabia no puede probarle con una base de datos no bien pueda te envio el resultado.

Saludos O'NKN
Buenas tardes O´NKN

Bueno he hecho las modificaciones a la libreria y al .c para el objeto, sin embargo al compilar para crera el objeto me marca incopatibilidad de valor en return, lo ke regreso no es compatible con el tipo de funcion, quiero suponer ke es por el compilador o el lenguaje, al parecer tu manejas C++ y yo C, pero no estoy seguro de ello, de cualquier modo no me compila asi como esta en tu ejemplo
Yo trabajo con C++ y programo a traves de Kdevelop, estuve revisando el codigo he hice algunas modificaciones, ahora lo probé y conecta a mi servidor mysql, también desconecta y no da ningún warning al compilar.

El programa (con las nuevas modificaciones) lo edité en el post anterior para no dejar tanto codigo y confundir.

Los Char los puse como constantes porque no estoy acostumbrado a usarlos como en el original, supongo que no traera problemas hacerlo de otra forma.

Saludos O'NKN
Hola O'NKN

Aqui con buenas nuevas, se ha resuelto los warning gracias a ti 1-grin, al parecer no era necesario manejar punteros de parametros en el main, la funcion "conexionserv" si es necesario declararla como MYSQL junto con el .h, ahora todo se compila correctamente sin warnings, solo keda decirte muchisimas gracias y el problema ha sido resuelto 1-grin
Que sigas bien !!!!!!!!!!!!

Saludos O'NKN
URLs de Referencia