【问题标题】:How to use Strtok for tokenizing a Const char*?如何使用 Strtok 对 Const char* 进行标记?
【发布时间】:2012-05-04 03:12:19
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 你的意思是我应该从那个页面复制?
  • 不,我的意思是你应该使用描述的函数复制字符串。
  • 是的,没错。我也这样做了。谢谢

标签: c++ c strtok


【解决方案1】:

由于 strtok 实际上写入您的字符串,因此您需要对其进行可写副本以进行标记;

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

【讨论】:

  • 复制的 c++ 方法是 std::vector<char> copy(myReadonlyString, myReadonlyString+strlen(myReadonlyString));。然后您可以标记copy->data()。只要副本超出范围,编译器就会自动取消分配。
  • @Manuel,您存储在 copy 中的值不是以空值结尾的。使用strlen(myReadonlyString) + 1 确保输入的终止符包含在向量中。
【解决方案2】:

将其声明为数组:

char tokenedStr[] = "OpenStack:OpenStack1";

如果不可能,请将其复制到 char 数组中。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2021-08-12
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多