elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  strtok
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: strtok  (Leído 3,034 veces)
LAULAU12

Desconectado Desconectado

Mensajes: 5


Ver Perfil
strtok
« 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.


« Última modificación: 26 Enero 2015, 22:03 pm por LAULAU12 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: strtok
« Respuesta #1 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


En línea

elProfeta1979

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: strtok
« Respuesta #2 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Separar string con strtok
Programación C/C++
janus_gf 0 3,492 Último mensaje 21 Febrero 2011, 09:19 am
por janus_gf
Mi programa crashea al usar Strtok
Programación C/C++
Lunethlion 8 3,953 Último mensaje 19 Mayo 2016, 19:46 pm
por engel lex
¿Comó usar strtok con listas de la biblioteca <vector>?
Programación C/C++
oriana_anairo 2 2,507 Último mensaje 16 Septiembre 2016, 14:41 pm
por ivancea96
Strtok--Dividir Fecha
Programación C/C++
eduardo1012 3 2,272 Último mensaje 10 Noviembre 2016, 19:38 pm
por geeke
Problema con strtok
Programación C/C++
arcanaer 0 1,629 Último mensaje 21 Noviembre 2016, 07:01 am
por arcanaer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines