c-从strtok返回的令牌的生存期



在阅读了man7.org的文档和StackOverflow上的一些问题后,我仍然很难理解谁管理strtok函数返回的令牌的生存期。我看到的大多数例子都显示了strtok函数的以下用法:

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

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

谢谢!

对于这样的问题,阅读strtok()实现的源代码可能非常有指导意义。

简而言之:

  • 它返回指向buffer的指针,即原始字符串
  • 是的,令牌被字符串终止符所取代,这就是为什么strtok()如此可怕并且不安全

相关内容

  • 没有找到相关文章

最新更新