Do I need to free the strtok resulting string?

蹲街弑〆低调 提交于 2019-12-04 01:24:35

strtok manipulates the string you pass in and returns a pointer to it, so no memory is allocated.

Please consider using strsep or at least strtok_r to save you some headaches later.

qwwqwwq

According to the docs:

Return Value

A pointer to the last token found in string.

Since the return pointer just points to one of the bytes in your input string where the token starts, whether you need to free depends on whether you allocated the input string or not.

FuzzyBunnySlippers

The first parameter to the strtok(...) function is YOUR string:

str
C string to truncate. Notice that this string is modified by being broken into smaller strings (tokens). Alternativelly, a null pointer may be specified, in which case the function continues scanning where a previous successful call to the function ended.

It puts '\0' characters into YOUR string and returns them as terminated strings. Yes, it mangles your original string. If you need it later, make a copy.

Further, it should not be a constant string (e.g. char* myStr = "constant string";). See here.

It could be allocated locally or by malloc/calloc.

If you allocated it locally on the stack (e.g. char myStr[100];), you don't have to free it.

If you allocated it by malloc (e.g. char* myStr = malloc(100*sizeof(char));), you need to free it.

Some example code:

#include <string.h>
#include <stdio.h>
int main()
{
   const char str[80] = "This is an example string.";
   const char s[2] = " ";
   char *token;

   /* get the first token */
   token = strtok(str, s);

   /* walk through other tokens */
   while( token != NULL ) 
   {
      printf( " %s\n", token );

      token = strtok(NULL, s);
   }

   return(0);
}

NOTE: This example shows how you iterate through the string...since your original string was mangled, strtok(...) remembers where you were last time and keeps working through the string.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!