阅读了man7.org中的文档以及StackOverflow上的一些问题后,我仍然无法理解谁管理从strtok函数返回的令牌的生命周期。我见过的大多数示例都显示了strtok函数的以下用法:
char *token = NULL;
token = strtok(buffer, " ");
while (token != NULL) {
token = strtok(NULL, " ");
}
我知道strtok返回指向下一个标记的指针,当字符串中没有更多标记时返回NULL。但是,我们不会为这些令牌预先分配任何存储(在堆栈上,或使用malloc)。 strtok如何为每个令牌分配存储空间?我是否必须在每个令牌上免费调用以防止内存泄漏?我是否可以在不使用strcpy的情况下将令牌放入数组中,或者它们是否会超出范围并从堆栈中弹出,留下一系列悬空指针?
谢谢!
答案 0 :(得分:0)
对于这些问题,reading the source of an strtok()
implementation可能非常有启发性。
简而言之:
buffer
的指针,即原始字符串。strtok()
如此可怕而且不是线程安全的原因。