Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LAULAU12 en 26 Enero 2015, 21:37 pm



Título: strtok
Publicado por: LAULAU12 en 26 Enero 2015, 21:37 pm
Buenas compañeros.

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

Código:
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.


Título: Re: strtok
Publicado por: eferion en 27 Enero 2015, 09:08 am
Código
  1. char palabra[50];
  2. 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:

Código
  1. char *palabra;
  2. palabra = strtok(cadena, ",");

Por otro lado:

Código
  1. char **palabras = NULL;
  2. while( palabra!=NULL )
  3. {
  4.  palabras[i] = strdup(palabra);
  5. }

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


Título: Re: strtok
Publicado por: elProfeta1979 en 27 Enero 2015, 16:26 pm
aporto un ejemplo  ::)

Código
  1. int main()
  2. {  /* inicializa el arreglo de cadena */
  3.   char cadena[] = "Este es un enunciado con 7 tokens";
  4.   char *ptrToken; /* crea un apuntador char */
  5.   printf("%s\n%s\n%s\n",
  6.           "La cadena a dividir en tokens es:", cadena,
  7.           "Los tokens son:");
  8.   ptrToken = strtok(cadena, " ");/* comienza la divisiónen tokens del enunciado */
  9.   /* continua la división en tokens hasta que ptrToken se hace NULL */
  10.   while (ptrToken != NULL)
  11.   {  printf( "%s\n", ptrToken );
  12.      ptrToken = strtok(NULL, " "); /* obtiene el siguiente token */
  13.   } /* fin de while */
  14.   return 0; /* indica terminación exitosa */
  15. } /* fin de main */
  16.  

saludos