使用strtok()函数时的内存分配

时间:2016-10-26 13:52:59

标签: c string memory-management tokenize strtok

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

strtok不分配任何内存;它会对您在初始调用中传递的字符串进行修改。令牌被留在原始字符串中进行标记化,因此只要不被解除分配(由您strtok赢得),您的令牌仍然会存在。