gpt4 book ai didi

c - 从 strtok 返回的 token 的生命周期

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:14 24 4
gpt4 key购买 nike

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

char *token = NULL;

token = strtok(buffer, " ");

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

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

谢谢!

最佳答案

对于此类问题,reading the source of an strtok() implementation很有启发性。

简而言之:

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

关于c - 从 strtok 返回的 token 的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com