Buenas, mi ejercicio es el siguiente: tengo que guardar un string en un array, y luego decir cuál es la palabra que más se repite. Para ello, he pensado guardar cada palabra en un array de punteros, y luego hacer las comparaciones y tal.
El problema viene cuando intento copiar manualmente caracteres en los arrays de punteros. En el siguiente ejemplo:
void copiarPalabras(char *string, char *palabras[]);
{
int i = 0;
//Para las primeras 10 letras, por ejemplo
palabras[0] = (char*) malloc(10 * sizeof(char) );
while( *(string+ i) != ' ' ) //Copiamos la primera palabra de la frase
{
*(palabras[0] + i) = *(string+ i);
i++;
}
palabras[i] = '\0';
}
Si, por ejemplo, guardo desde el teclado "hola que tal" en string, en palabras[0] no sólo no se copia "hola", sino basura (strlen me dice que hay 24 caracteres en total). Si compruebo las vueltas que ha dado el bucle, efectivamente son 4 , el número de letras, y además añado el '\0' al final. Funciona mal reserve el espacio que reserve con malloc.
PD: con calloc en lugar de malloc sí funciona correctamente, pero quiero saber qué es lo que hago mal en esa función como está.
Gracias y saludos.
Fíjate en esta sentencia:
palabras[i] = '\0';
¿A qué le estás asignando el carácter nulo, al array de caracteres o al array de punteros? :silbar: .
Cita de: avesudra en 26 Marzo 2013, 20:25 PM
Fíjate en esta sentencia:
palabras[i] = '\0';
¿A qué le estás asignando el carácter nulo, al array de caracteres o al array de punteros? :silbar:
(http://img824.imageshack.us/img824/8837/facepalmq.gif)
Menudo despiste... Pensaba que la aritmética de punteros ya la dominaba por completo ;D
Muchas gracias.
Cita de: NathanD en 26 Marzo 2013, 20:29 PM
(http://img824.imageshack.us/img824/8837/facepalmq.gif)
Menudo despiste... Pensaba que la aritmética de punteros ya la dominaba por completo ;D
Muchas gracias.
Los errores más complicados de ver son los absurdos :xD , usa el depurador cuando no veas rápido porque es.
¡Un saludo!
Cita de: avesudra en 26 Marzo 2013, 20:31 PM
Los errores más complicados de ver son los absurdos :xD
+1
Puedo asegurar que el 80% de estos errores son por cosas como esa.