[ Foro de C ]

Cadena de texto

29-Dec-2010 20:15
Diego Fernández
1 Respuestas

Estaba intentando hacer un programa que escribe una palabra separando las letras con un espacio, pero al intentar hacerlo, el compilador (terminal de linux) me dice "Violación de segmento".¿Que he hecho mal?
este es el ejercicio:
#include<stdio.h>
main()
{
char palabra[10];
int i;
scanf("%s",palabra);
do
{
printf("%c ",palabra[i]);
i = i+1;
}
while (i !=10);
}


gracias


07-Jan-2011 00:18
Nacho Cabanes (+83)

Hola, Diego.

Perdona el retraso en contestar. Tu fuente tiene varios problemas. El más grave, y que provoca la "violación de segmento", es que no das un valor a la variable "i":

int i;

en vez de

int i=0;

Si no le das valor, no contendrá el valor 0, sino basura, lo que hubiera en la posición de memoria que se ha reservado para esa variable, con lo que es muy posible que "palabra[i]" no sea una posición válida de tu cadena.

Otro riesgo potencial es eso de que tu "while" termine en 10: si escribes una palabra de menos de 10 letras, se te mostrará basura en pantalla. Es un comportamiento incorrecto, pero al menos verás que "sí escribe algo".  ;-)  Sería más razonable comprobar si has llegado a la longitud de la palabra: "strlen(palabra)"

Hay alguna otra cosa peligrosa, pero esas dos harán que funcione razonablemente bien.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)