[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