[C con Clase] Necesito ayuda con esta función que devuelve un array (char **)

MON monantunez en yahoo.es
Lun Abr 30 18:17:26 CEST 2012


Se trata de una función a la que se le envía como argumento una frase y sirviéndome de la función "strtok" debe devolver, en un array (char **), cada una de las palabras que la componen. Sin embargo, se produce un error en los dos primeros elementos del array.

Os transcribo el código (indicando al final el error que se produce)

char **split(const char *palabra)
{
char *s   = NULL;
char *tmp = NULL;
char **p  = NULL;
int count = 0;  //contador inicial de elementos del array (char **)

s = (char *)malloc( 1 + strlen(palabra) );
strcpy(s, palabra);
tmp = strtok(s, " ");

while( NULL != tmp )
{
p = (char **)realloc(p, sizeof(char *) * (count + 1) );  // un nuevo elemento para el array
p[count] = tmp;   // asigno al elemento la palabra obtenida por "strtok"
tmp = strtok(NULL, " ");  // llamo a la función
count++;   // incremento el contador
}

free(s);
s = 0;

// el último elemento del array debe ser nulo
p = (char **)realloc(p, sizeof(char *) * (count + 1) );
p[count] = '\0';

return p;
}


int main(const int argc, char * argv[])
{
// llamamos a la función
char **p = split("Lo que el viento se llevó");

// recorremos "p" para mostrar cada una de las palabra
while( *p != NULL )
{
printf("%s\n", *p);
++p;
}
/*
  ¡LO QUE SALE POR PANTALLA! ¡ERROR!
  
  [un espacio vacío en lugar de "Lo"]
  [otro espacio vacío en lugar de "que"]
  el
  viento
  se
  llevó
 */

return 0;
} 


Me podéis aclarar dónde falla mi código. ¡Gracias !
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120430/fcb836bf/attachment.html>


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