2012-04-23 56 views
11

我有一個const char *變量,它可能有一個像「OpenStack:OpenStack1」的值。我想使用strtok標記這個const char *,其中分隔符(它是一個const char *類型)是「:」。但問題是以下類型: char * strtok(char * str,const char * delimiters);如何使用Strtok來標記Const char *?

這意味着我不能使用const char *作爲第一個輸入,因爲它必須是char *。你能說我如何將這個const char *轉換爲char *嗎?

謝謝。

+1

複製它? http://linux.die.net/man/3/strdup – 2012-04-23 13:42:13

+0

你的意思是我應該從該頁複製? – 2012-04-23 13:47:59

+0

不,我的意思是你應該使用描述的函數複製字符串。 – 2012-04-23 13:51:48

回答

12

由於strtok實際上會寫入您的字符串,因此您需要對其進行寫入副本以進行標記;

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

感謝隊友,它的工作原理。 – 2012-04-23 13:50:55

+3

製作副本的C++方法是'std :: vector copy(myReadonlyString,myReadonlyString + strlen(myReadonlyString));'。然後你可以標記'copy-> data()'。只要超出範圍,編譯器就會自動解除分配。 – ManuelAtWork 2016-02-15 12:55:49

0

您可以製作不可修改字符串的副本,然後使用strtok

您可以輕易地使用mallocstrcpy來複制字符串。

1

聲明它作爲數組:

char tokenedStr[] = "OpenStack:OpenStack1"; 

如果不可能的,將它複製到一個字符數組。

+0

雅這也是一個好方法。 – 2012-04-23 13:51:15