2012-04-23 80 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