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.
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
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