2012-04-23 9 views
11

Tengo una variable const char * que puede tener un valor como "OpenStack: OpenStack1". Quiero tokenizar este const char * usando strtok donde el delimitador (que es de tipo const char *) es ":". Pero el problema es que strtok es del siguiente tipo: char * strtok (char * str, const char * delimitadores);¿Cómo usar Strtok para tokenizar un Const char *?

Lo que significa que no puedo usar const char * para la primera entrada, ya que tiene que ser char *. ¿Podrías decirme cómo puedo convertir este const char * en char *?

Gracias.

+1

¿Copiar? http://linux.die.net/man/3/strdup –

+0

¿Querías decir que debería copiar desde esa página? –

+0

No, quise decir que debe copiar la cadena usando la función descrita. –

Respuesta

12

Dado que strtok realmente escribe en su cadena, necesita hacer una copia editable de la misma para tokenizar;

char* copy = strdup(myReadonlyString); 
...tokenize copy... 
free(copy); 
+0

Gracias amigo, funciona. –

+3

Una forma C++ de hacer una copia sería 'std :: vector copy (myReadonlyString, myReadonlyString + strlen (myReadonlyString));'. A continuación, puede tokenize 'copy-> data()'. El compilador desasignará la copia automáticamente cada vez que salga del alcance. – ManuelAtWork

0

Puede hacer una copia de su cadena no modificable y luego usar strtok.

Puede usar de forma portátil malloc y strcpy para copiar la cadena.

1

la declara como una matriz:

char tokenedStr[] = "OpenStack:OpenStack1"; 

si no es posible, copiarlo en una matriz de caracteres.

+0

Ya que también es una buena manera. –

Cuestiones relacionadas