[C con Clase] Error en código

Programante programante en gmail.com
Mie Abr 25 22:35:45 CEST 2007


Omar Murray escribió:
> Hola lista:
>
> Tengo este trozo de código:
>
> ******************************************************
> printf("\nIngrese cadena de caracteres:\n--->");
> x=0;
> gets(cad);
> while (x<TAM && cad[x]!=' ' && cad[x]!='.')
>    { vec[x]=cad[x];
>      x++;
>    }
>   
vec[x] = '\0';
> printf("\nLa  primer cadena es: %s\n",vec);
> ******************************************************
>
> La idea es que si cad contiene "Hola soy Omar.", el array vec tome la
> primer palabra y la imprima por pantalla, es decir "Hola".
>
> El problema es que imprime esto:
>
> Hola                Hola soy Omar
> ^^^^^^^^^^^^^^^^^^^^
> Esto es el TAM del array vec (es este caso TAM = 20).
>
> Donde está el error que no lo encuentro..?
>
> Gracias y saludos.
Para saber donde acaba la palabra, las cadenas de tipo C acaban siempre 
con el caracter \0. En este caso se excribe todo vec, pasando a la 
siguiente memoria que en este caso coincide con cad. Como ésta si 
termina en \0, no va más allá. Podría imprimir miles de bytes antes de 
encontrar el \0 correspondiente.

PD: Supongo que ya sabes que ese programa es peligroso al poder 
introducirle más de TAM-1 caracteres...




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