令牌的生命周期从strtok返回

时间:2014-10-09 16:04:17

标签: c memory-management malloc strtok

阅读了man7.org中的文档以及StackOverflow上的一些问题后,我仍然无法理解谁管理从strtok函数返回的令牌的生命周期。我见过的大多数示例都显示了strtok函数的以下用法:

char *token = NULL;

token = strtok(buffer, " ");

while (token != NULL) {
    token = strtok(NULL, " ");
}

我知道strtok返回指向下一个标记的指针,当字符串中没有更多标记时返回NULL。但是,我们不会为这些令牌预先分配任何存储(在堆栈上,或使用malloc)。 strtok如何为每个令牌分配存储空间?我是否必须在每个令牌上免费调用以防止内存泄漏?我是否可以在不使用strcpy的情况下将令牌放入数组中,或者它们是否会超出范围并从堆栈中弹出,留下一系列悬空指针?

谢谢!

1 个答案:

答案 0 :(得分:0)

对于这些问题,reading the source of an strtok() implementation可能非常有启发性。

简而言之:

  • 它返回指向buffer的指针,即原始字符串。
  • 是的,令牌被字符串终结符替换,这就是strtok()如此可怕而且不是线程安全的原因。