[C con Clase] problema con puntero

Juan Marco Ballarati juan.marco.ballarati en gmail.com
Mar Ago 28 22:51:03 CEST 2007


strlen te da la cantidad de caracteres de la cadena, sin contar el nulo al
final. por lo tanto con este for:

for (i=0; i<numero; i++)
                        {
                                consulta[i]=caux[i];
                        }

estas copiando todos los caracteres de caux en consulta, pero no estas
poniendolo el '\0' al final para indicar fin de cadena.

luego de ese for podrias poner consulta[i] = '\0'; y deberia andar.

O tambien podrias omitir usar ese for y utilizar strcpy, que te copia toda
la cadena incluyendo el nulo ( strcpy( char* cadena_destino, char*
cadena_origen ); ) para lo que tendrias que incluir string.h.

Sin embargo, estas alocando espacio para caux de un byte ( sizeof(char) ) y
estas usando gets, con lo que estas escribiendo en memoria que no tenes
reservada.

deberias ver como manejar eso, ya sea usando un array de char o ese puntero
pero asignandole mas memoria.

espero que te sea de ayuda
saludos.


El día 28/08/07, duna.montero en ldasistencia.com <
duna.montero en ldasistencia.com> escribió:
>
>
> Hola.
> Tengo un problema con un puntero.
> El programa acepta una cadena de caracteres que no sé en un principio el
> número que tiene.
> He programado esto, pero se queda basura después del ;, que debería ser el
> último caracter.
> Os pongo el código a ver si a alguien se le ocurre algo.
> Muchas gracias.
>
>
> int main()
> {
>
>         //char consulta [256];
>         int a=0, numero, i;
>         char * caux, * consulta;
>
>
>
>   do
>   {
>
>                 printf ("\n\nEscriba la consulta \n\n");
>
>                         caux= (char *) malloc (sizeof (char));
>                         gets (caux);
>                         numero=strlen (caux);
>                         printf ("%d", numero);
>
>                         consulta = (char*) malloc (numero*(sizeof
> (char)));
>
>                         for (i=0; i<numero; i++)
>                         {
>                                 consulta[i]=caux[i];
>                         }
>
>
>                         printf ("\n%s\n", consulta);
>
>                 a = siok (consulta);
>
>                 if (a==0)
>                 {
>                         printf ("\nLa consulta descrita no es
> correcta\n");
>                         getch();
>                 }
>                 free(consulta);
>                 free (caux);
>                 fflush (stdin);
>
>
>   }while (a==0);
>
>
> Meto esto y me da el resultado siguiente:
>
>
>
> Escriba la consulta
>
> select * from libros where cl = 123;
> 36
> select * from libros where cl = 123;½½½½½½½½¯■¯■
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070828/5f875bcc/attachment.html>


Más información sobre la lista de distribución Cconclase