Do I need to free the strtok resulting string?

前端 未结 3 1392
遇见更好的自我
遇见更好的自我 2021-01-01 15:30

Or rather, how does strtok produce the string to which it\'s return value points? Does it allocate memory dynamically? I am asking because I am not sure if I need to free th

3条回答
  •  一个人的身影
    2021-01-01 16:02

    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 
    #include 
    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.

提交回复
热议问题