strTok function (thread safe, supports empty tokens, doesn't change string)

Can a monk's single staff be considered dual wielded, as per the Dual Wielder feat?

What does the "remote control" for a QF-4 look like?

What typically incentivizes a professor to change jobs to a lower ranking university?

Unable to deploy metadata from Partner Developer scratch org because of extra fields

Did Shadowfax go to Valinor?

Why doesn't Newton's third law mean a person bounces back to where they started when they hit the ground?

Convert two switches to a dual stack, and add outlet - possible here?

Is it legal for company to use my work email to pretend I still work there?

Could an aircraft fly or hover using only jets of compressed air?

Why is Minecraft giving an OpenGL error?

Why can't we play rap on piano?

Mortgage Pre-approval / Loan - Apply Alone or with Fiancée?

Alternative to sending password over mail?

Can you really stack all of this on an Opportunity Attack?

Does detail obscure or enhance action?

Client team has low performances and low technical skills: we always fix their work and now they stop collaborate with us. How to solve?

Modeling an IP Address

Rock identification in KY

When a company launches a new product do they "come out" with a new product or do they "come up" with a new product?

meaning of に in 本当に?

Accidentally leaked the solution to an assignment, what to do now? (I'm the prof)

How old can references or sources in a thesis be?

Arrow those variables!

Paid for article while in US on F-1 visa?



strTok function (thread safe, supports empty tokens, doesn't change string)







.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0












$begingroup$


I'm new to C language and want to explode a string like we do in PHP explode() function, I searched for a built-in function with the C standard library, and I found strtok , but It doesn't support empty tokens like 1,2,3,,5 . Inspired by the answers I found in this SO question I made this function, it is supposed to be thread safe and support empty tokens and doesn't change the original string



char* strTok(char** newString, char* delimiter)

char* string = *newString;
char* delimiterFound = (char*) 0;
int tokLenght = 0;
char* tok = (char*) 0;

if(!string) return (char*) 0;

delimiterFound = strstr(string, delimiter);

if(delimiterFound)
tokLenght = delimiterFound-string;
else
tokLenght = strlen(string);


tok = malloc(tokLenght + 1);
memcpy(tok, string, tokLenght);
tok[tokLenght] = '';

*newString = delimiterFound ? delimiterFound + strlen(delimiter) : (char*)0;

return tok;



I designed it to be used like



char* input = "1,2,3,4,5,6,7,,,10,";
char** inputP = &input;
char* tok;
while( (tok=strTok(inputP, ",")) )
printf("%sn", tok);









share









$endgroup$


















    0












    $begingroup$


    I'm new to C language and want to explode a string like we do in PHP explode() function, I searched for a built-in function with the C standard library, and I found strtok , but It doesn't support empty tokens like 1,2,3,,5 . Inspired by the answers I found in this SO question I made this function, it is supposed to be thread safe and support empty tokens and doesn't change the original string



    char* strTok(char** newString, char* delimiter)

    char* string = *newString;
    char* delimiterFound = (char*) 0;
    int tokLenght = 0;
    char* tok = (char*) 0;

    if(!string) return (char*) 0;

    delimiterFound = strstr(string, delimiter);

    if(delimiterFound)
    tokLenght = delimiterFound-string;
    else
    tokLenght = strlen(string);


    tok = malloc(tokLenght + 1);
    memcpy(tok, string, tokLenght);
    tok[tokLenght] = '';

    *newString = delimiterFound ? delimiterFound + strlen(delimiter) : (char*)0;

    return tok;



    I designed it to be used like



    char* input = "1,2,3,4,5,6,7,,,10,";
    char** inputP = &input;
    char* tok;
    while( (tok=strTok(inputP, ",")) )
    printf("%sn", tok);









    share









    $endgroup$














      0












      0








      0





      $begingroup$


      I'm new to C language and want to explode a string like we do in PHP explode() function, I searched for a built-in function with the C standard library, and I found strtok , but It doesn't support empty tokens like 1,2,3,,5 . Inspired by the answers I found in this SO question I made this function, it is supposed to be thread safe and support empty tokens and doesn't change the original string



      char* strTok(char** newString, char* delimiter)

      char* string = *newString;
      char* delimiterFound = (char*) 0;
      int tokLenght = 0;
      char* tok = (char*) 0;

      if(!string) return (char*) 0;

      delimiterFound = strstr(string, delimiter);

      if(delimiterFound)
      tokLenght = delimiterFound-string;
      else
      tokLenght = strlen(string);


      tok = malloc(tokLenght + 1);
      memcpy(tok, string, tokLenght);
      tok[tokLenght] = '';

      *newString = delimiterFound ? delimiterFound + strlen(delimiter) : (char*)0;

      return tok;



      I designed it to be used like



      char* input = "1,2,3,4,5,6,7,,,10,";
      char** inputP = &input;
      char* tok;
      while( (tok=strTok(inputP, ",")) )
      printf("%sn", tok);









      share









      $endgroup$




      I'm new to C language and want to explode a string like we do in PHP explode() function, I searched for a built-in function with the C standard library, and I found strtok , but It doesn't support empty tokens like 1,2,3,,5 . Inspired by the answers I found in this SO question I made this function, it is supposed to be thread safe and support empty tokens and doesn't change the original string



      char* strTok(char** newString, char* delimiter)

      char* string = *newString;
      char* delimiterFound = (char*) 0;
      int tokLenght = 0;
      char* tok = (char*) 0;

      if(!string) return (char*) 0;

      delimiterFound = strstr(string, delimiter);

      if(delimiterFound)
      tokLenght = delimiterFound-string;
      else
      tokLenght = strlen(string);


      tok = malloc(tokLenght + 1);
      memcpy(tok, string, tokLenght);
      tok[tokLenght] = '';

      *newString = delimiterFound ? delimiterFound + strlen(delimiter) : (char*)0;

      return tok;



      I designed it to be used like



      char* input = "1,2,3,4,5,6,7,,,10,";
      char** inputP = &input;
      char* tok;
      while( (tok=strTok(inputP, ",")) )
      printf("%sn", tok);







      beginner c strings





      share












      share










      share



      share










      asked 2 mins ago









      Accountant مAccountant م

      1607




      1607




















          0






          active

          oldest

          votes












          Your Answer





          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("mathjaxEditing", function ()
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          );
          );
          , "mathjax-editing");

          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "196"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216956%2fstrtok-function-thread-safe-supports-empty-tokens-doesnt-change-string%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216956%2fstrtok-function-thread-safe-supports-empty-tokens-doesnt-change-string%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          कुँवर स्रोत दिक्चालन सूची"कुँवर""राणा कुँवरके वंशावली"

          Why is a white electrical wire connected to 2 black wires?How to wire a light fixture with 3 white wires in box?How should I wire a ceiling fan when there's only three wires in the box?Two white, two black, two ground, and red wire in ceiling box connected to switchWhy is there a white wire connected to multiple black wires in my light box?How to wire a light with two white wires and one black wireReplace light switch connected to a power outlet with dimmer - two black wires to one black and redHow to wire a light with multiple black/white/green wires from the ceiling?Ceiling box has 2 black and white wires but fan/ light only has 1 of eachWhy neutral wire connected to load wire?Switch with 2 black, 2 white, 2 ground and 1 red wire connected to ceiling light and a receptacle?

          चैत्य भूमि चित्र दीर्घा सन्दर्भ बाहरी कडियाँ दिक्चालन सूची"Chaitya Bhoomi""Chaitya Bhoomi: Statue of Equality in India""Dadar Chaitya Bhoomi: Statue of Equality in India""Ambedkar memorial: Centre okays transfer of Indu Mill land"चैत्यभमि