谁在管理 C lib 的内存,如“strtok”

Jes*_*sse -1 c++

当我想使用C lib函数时strtok,我发现它提供了一个堆点,我想用CPP RAII来管理这个堆指针。但我发现我无法释放它,是否有人在管理这部分内存?或者我如何确认它的生命周期?

在此输入图像描述

chq*_*lie 6

strtok与堆没有任何关系。它不分配内存,它返回数组内的指针,该指针char作为第一个参数传递给最后一次调用,并且第一个参数非空。该数组被修改是一个副作用。

这个 C 函数具有令人困惑且容易出错的语义,它是不可重入的,并且在许多目标上不是线程安全的。

我建议你根本不要使用这个函数,特别是在你想要实现 RAII 的 C++ 代码中。

应该有 C++ 替代品可用作该std::string类型的方法。

如果您想用 C 语言编程,请考虑诸如 之类的替代方案strtok_r,或使用和strsep分析字符串(这样不会修改源字符串),并使用 从堆中分配标记。strspnstrcspnstrndup