strtok

Iniciado por LAULAU12, 26 Enero 2015, 21:37 PM

0 Miembros y 1 Visitante están viendo este tema.

LAULAU12

Buenas compañeros.

Esta vez tengo un problema con strtok: tengo la siguiente funcion:

char** obtengo(char *cadena){

char **palabras = NULL;
char palabra[50];
int i=0;

palabra = strtok(cadena,",");

while( palabra!=NULL ) {
palabras[i] = strdup(palabra);
i++;
palabra = strtok(NULL,",");
}

return palabras;
}


Recibe por puntero una cadena de palabras separadas por comas. Necesito sacar mediante strtok las diferentes palabras y guardarlas en un array que devuelvo.

El problema viene al hacer strtok con el puntero cadena, me devuelve un error de incompatibilidad.

eferion


char palabra[50];
palabra = strtok(cadena,",");


A ver, strtok te devuelve un puntero a una posición de "cadena"... el problema es que "palabra", pese a ser un puntero, no es de un tipo compatible con la función. "palabra" es un puntero que va a apuntar a una estructura fija de 50 caracteres... no puedes cambiar la posición a la que apunta dicho puntero.

Lo que tienes que hacer es declarar un puntero a char... a secas:

char *palabra;
palabra = strtok(cadena, ",");


Por otro lado:

char **palabras = NULL;
while( palabra!=NULL )
{
  palabras[i] = strdup(palabra);
}


Ahí tienes un problema, ya que "palabras" no apunta a una dirección de memoria válida, luego todos los accesos que hagas a esta variable te van a dar problemas. En este caso podrías plantearte hacer una reserva de memoria con malloc para poder almacenar los punteros.

Un saludo

elProfeta1979

aporto un ejemplo  ::)

int main()
{  /* inicializa el arreglo de cadena */
   char cadena[] = "Este es un enunciado con 7 tokens";
   char *ptrToken; /* crea un apuntador char */
   printf("%s\n%s\n%s\n",
           "La cadena a dividir en tokens es:", cadena,
           "Los tokens son:");
   ptrToken = strtok(cadena, " ");/* comienza la divisiónen tokens del enunciado */
   /* continua la división en tokens hasta que ptrToken se hace NULL */
   while (ptrToken != NULL)
   {  printf( "%s\n", ptrToken );
      ptrToken = strtok(NULL, " "); /* obtiene el siguiente token */
   } /* fin de while */
   return 0; /* indica terminación exitosa */
} /* fin de main */


saludos