如何处理strtok_r在C++中的内存问题

   2024-09-30 7270
核心提示:strtok_r 是一个 C 语言库函数,用于将字符串分割成一系列的标记包含必要的头文件:#includeiostream#include cstring创建一个可

strtok_r 是一个 C 语言库函数,用于将字符串分割成一系列的标记

包含必要的头文件:
#include<iostream>#include <cstring>
创建一个可以修改的字符串副本。使用 std::string 时,请确保先将其转换为 char 数组。例如:
std::string input = "This is a sample string";char *input_copy = new char[input.size() + 1];std::strcpy(input_copy, input.c_str());
使用 strtok_r 分割字符串。注意,strtok_r 会修改原始字符串,因此务必使用副本。
char *saveptr;char *token = std::strtok_r(input_copy, " ", &saveptr);
遍历并处理所有分割后的子字符串:
while (token != nullptr) {    // 处理 token    std::cout<< token<< std::endl;    // 获取下一个 token    token = std::strtok_r(nullptr, " ", &saveptr);}
最后,释放分配给 input_copy 的内存:
delete[] input_copy;

这样,您就可以在 C++ 中安全地使用 strtok_r 函数处理字符串,同时避免内存泄漏和其他内存问题。

完整示例代码:

#include<iostream>#include <cstring>int main() {    std::string input = "This is a sample string";    char *input_copy = new char[input.size() + 1];    std::strcpy(input_copy, input.c_str());    char *saveptr;    char *token = std::strtok_r(input_copy, " ", &saveptr);    while (token != nullptr) {        // 处理 token        std::cout<< token<< std::endl;        // 获取下一个 token        token = std::strtok_r(nullptr, " ", &saveptr);    }    delete[] input_copy;    return 0;}

 
举报打赏
 
更多>同类网点查询
推荐图文
推荐网点查询
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号