如何使用Strtok标记Const char*?

the*_*ive 18 c c++ strtok

我有一个const char*变量,它可能有一个像"OpenStack:OpenStack1"的值.我想用strtok标记这个const char*,其中分隔符(它是一个const char*类型)是":".但问题是strtok是以下类型:char*strtok(char*str,const char*delimiters);

这意味着我不能使用const char*作为第一个输入,因为它必须是char*.你能告诉我如何将这个const char*转换为char*吗?

谢谢.

Joa*_*son 19

由于strtok实际上写入了你的字符串,你需要制作一个可写的副本来标记化;

char* copy = strdup(myReadonlyString);
...tokenize copy...
free(copy);
Run Code Online (Sandbox Code Playgroud)

  • 制作副本的c ++方法是`std :: vector <char> copy(myReadonlyString,myReadonlyString + strlen(myReadonlyString));`.然后,您可以对`copy-> data()`进行标记.只要超出范围,编译器就会自动取消分配副本. (3认同)
  • @Manuel,您存储在 `copy` 中的值不是以 null 结尾的。使用 `strlen(myReadonlyString) + 1` 来确保输入的终止符包含在向量中。 (3认同)