【问题标题】:Memory allocation when using the strtok() function使用 strtok() 函数时的内存分配
【发布时间】:2016-10-26 13:52:58
【问题描述】:

是否每次使用strtok() 时都必须为字符串重新分配内存,还是该函数会为您执行此操作?我想知道,因为我正在编写一个程序,它从文件中读取一行并将其分解为标记。我想将每个令牌存储在一个名为cell 的变量中。我可以创建多个字符串并将它们放在一个链表中,但这会给程序增加很多开销,所以我想尽量避免它。因此,假设您将cell 的值设置为从strtok() 返回的第一个字符串,使用它,然后使用赋值语句将其值设置为从strtok() 返回的第二个字符串。我知道这只会将指针重定向到新的字符数组,放弃旧的数组。这会导致旧字符串成为丢失的对象,还是strtok() 为您释放旧字符串?

【问题讨论】:

标签: c string memory-management tokenize strtok


【解决方案1】:

strtok 不分配任何字符串,它将\0 字符插入源字符串并返回指向现在分离的标记的指针。源字符串的内存现在是存储多个字符串(标记)的内存。

【讨论】:

    【解决方案2】:

    strtok 不分配任何内存;它会修改您在初始调用中传递的字符串。标记留在被标记化的原始字符串中,所以只要不释放(由您;strtok 不会这样做),您的标记仍然存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 2021-11-29
      • 2019-07-14
      相关资源
      最近更新 更多