[C con Clase] otro error mysql-c
Programante
programante en gmail.com
Jue Jul 19 12:49:27 CEST 2007
duna.montero escribió:
> Holaaaaaaaaa.
> Dios, qué contentnta que estoy....
> Sabéis de dónde venía el error?
> Esque no me lo puedo creer...
> Venía desde el main...
> Os cuento...
> Bueno, os pongo el código maldito...
>
> int main()
> {
>
> char *consulta;
> int a=0;
>
>
>
> do
> {
> consulta=(char*)malloc(1*sizeof(char));
>
> printf ("\n\nEscriba la consulta \n\n");
>
> scanf("%[^\n]",consulta);
>
> printf ("La consulta escrita es: %s\n", consulta);
>
> a = siok (consulta);
>
> if (a==0)
> {
> printf ("\nLa consulta descrita no es correcta\n");
> getch();
> }
>
> //free (consulta);
>
> }while (a==0);
> return (0);
>
> }
>
>
> Ese era el código que tenía antes, pues era por el dichoso puntero de
> consulta... lo he puesto como un char consulta [256] y todo va como la
> seda...
>
Estabas intentando guardar toda la consulta en un byte, me parece que la
compresión de datos no ha llegado a esos niveles ;-)
Esto te lo soluciona siempre que tus consultas tengan menos de 256
caracteres, sino empezarán de nuevo los problemas (en este caso
con un desbordamiento de buffer). Te aconsejo usar en vez de fscan,
fgets(consulta, 256, stdin);
Con esto le dices que no escriba en consulta más de 256 caracteres (que
es el máximo que puede guardar). Luego posiblemente quieras
quitar el \n del final de la línea, que también queda guardado por fgets().
> Lo único que ahora no me hace bien es que si meto mal la consulta, va a
> siok(consulta) y después de analizar si está bien escrita o no, vuelve a if
> (a==0)...
> Pues no me deja volver a meter otra consulta, sino que solo cuando pulso
> cualquier tecla, vuelve a ponerme el mensaje de escriba consulta...
>
Para eso pusiste getch() ¿no? Para tener que pulsar una tecla antes de
que siga.
Si no es el getch(), puede que también tengas algún problema con
caracteres no leídos en el búfer. En tal caso
puedes probar haciendo fflush(stdin);
> Gracias.
>
De nada
Más información sobre la lista de distribución Cconclase