在c中使用strtok的问题

时间:2014-01-09 14:18:04

标签: strtok

我想有一个例程,它在字符串上执行以下操作:

  1. 使用strtok从字符串中提取子字符串并保存到新的字符数组。
  2. 在char数组上使用strtok来提取更多信息并存储到char数组。
  3. 返回原始字符串并使用strtok继续从我离开的位置提取字符串。
  4. 这可能吗?

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,但有问题:

通用strtok不是可重入的,即它存储有关它在静态位置执行的操作的信息,这意味着您无法在strtok的主要字符串之间跳转,只有一个分隔符和您提取的子字符串,带有另一个分隔符。您需要完全在主字符串中运行strtok,然后攻击提取的子字符串。

或者,如果您有一个较新的strtok_r库例程,_r表示此例程是可重入的,您可以设置一个实例来处理主字符串并让另一个实例处理提取子串,并在两者之间反弹。 strtok_r需要另外一个参数,它可以保存它正在执行的操作状态,从而使其正常工作。