2012-04-23 10 views
11

Mam zmienną const char *, która może mieć wartość typu "OpenStack: OpenStack1". Chcę tokenize this const char * za pomocą strtok gdzie separator (który jest typu const char *) to ":". Ale problemem jest strtok następujący typ: char * strtok (char * str, const char * ograniczniki);Jak używać Strtok do tokenizacji znaku Const *?

Co oznacza, że ​​nie mogę użyć const char * dla pierwszego wejścia, ponieważ musi to być znak *. Czy możesz mi powiedzieć, jak mogę przekonwertować ten const char * na char *?

Dziękuję.

+1

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

+0

Czy chcesz powiedzieć, że powinienem skopiować z tej strony? –

+0

Nie, chodzi mi o to, że powinieneś skopiować ciąg za pomocą opisanej funkcji. –

Odpowiedz

12

Ponieważ strtok faktycznie pisze do twojego ciągu, musisz zrobić jego kopię do tokenizacji;

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

Dzięki kolega, to działa. –

+3

C++ sposób tworzenia kopii byłby std :: vector copy (myReadonlyString, myReadonlyString + strlen (myReadonlyString)); '. Następnie możesz tokenize 'copy-> data()'. Kompilator automatycznie cofnie przydzielenie kopii, gdy tylko wykracza poza zakres. – ManuelAtWork

0

Możesz zrobić kopię swojego niezmodyfikowanego ciągu, a następnie użyć strtok.

Możesz przenośnie użyć malloc i strcpy, aby skopiować ciąg.

1

stwierdzenie jako tablicy:

char tokenedStr[] = "OpenStack:OpenStack1"; 

jeśli to możliwe, skopiuj ją do tablicy char.

+0

To też jest dobra droga. –

Powiązane problemy