如何使用Strtok来对一个Const char*进行分词?

23
我有一个const char*类型的变量,它可能具有类似于“OpenStack:OpenStack1”的值。我想要使用strtok令牌化这个const char*,其中定界符(也是const char*类型)是“:”。但问题在于strtok的类型如下: char * strtok(char * str,const char * delimiters);
这意味着我不能将const char*用作第一个输入,因为它必须是char*类型。您能告诉我如何将此const char*转换为char*吗?
谢谢。

1
复制它?http://linux.die.net/man/3/strdup - James M
你的意思是我应该从那个页面复制吗? - the_naive
不,我的意思是你应该使用所描述的函数复制字符串。 - James M
没错,完全正确。我也是这么做的。谢谢。 - the_naive
3个回答

24

由于strtok实际上会修改你的字符串,所以你需要创建一个可写的副本来进行分词;

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

4
用C++制作一个拷贝的方式是 std::vector<char> copy(myReadonlyString, myReadonlyString+strlen(myReadonlyString));。然后你可以对 copy->data() 进行分词。编译器会在其超出作用域时自动释放该拷贝。 - ManuelAtWork
4
@Manuel,你在 copy 中存储的值没有以 null 结尾。使用 strlen(myReadonlyString) + 1 确保输入的终止符包含在向量中。 - Rob Kennedy

2

声明为数组:

char tokenedStr[] = "OpenStack:OpenStack1";

如果不可能,将其复制到字符数组中。

0

您可以复制您的不可修改字符串,然后使用 strtok

您可以使用 mallocstrcpy 便携式地复制该字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接