[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