strTok function (thread safe, supports empty tokens, doesn't change string)String case reverse function in CGet line from string functionTDD: String Calculator KataC - K&R getint() variationSimple function to generate an HTML-safe stringGeneric Pairing Heap PerformancePattern for writing a generic string transformation functionChange a string into a function/def activatorC++ string tokenizing without streams, with certain conditionsRead consecutive blanks in array

How is the claim "I am in New York only if I am in America" the same as "If I am in New York, then I am in America?

Is it possible to do 50 km distance without any previous training?

Do I have a twin with permutated remainders?

Why does Kotter return in Welcome Back Kotter?

Why can't I see bouncing of a switch on an oscilloscope?

Malcev's paper "On a class of homogeneous spaces" in English

RSA: Danger of using p to create q

NMaximize is not converging to a solution

How old can references or sources in a thesis be?

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

What's the output of a record needle playing an out-of-speed record

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

Intersection point of 2 lines defined by 2 points each

Why are electrically insulating heatsinks so rare? Is it just cost?

Why is consensus so controversial in Britain?

Are astronomers waiting to see something in an image from a gravitational lens that they've already seen in an adjacent image?

Theorems that impeded progress

Character reincarnated...as a snail

How much of data wrangling is a data scientist's job?

A newer friend of my brother's gave him a load of baseball cards that are supposedly extremely valuable. Is this a scam?

Can a Cauchy sequence converge for one metric while not converging for another?

Add text to same line using sed

Is it unprofessional to ask if a job posting on GlassDoor is real?

Cross compiling for RPi - error while loading shared libraries



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


String case reverse function in CGet line from string functionTDD: String Calculator KataC - K&R getint() variationSimple function to generate an HTML-safe stringGeneric Pairing Heap PerformancePattern for writing a generic string transformation functionChange a string into a function/def activatorC++ string tokenizing without streams, with certain conditionsRead consecutive blanks in array






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








2












$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|improve this question









$endgroup$







  • 1




    $begingroup$
    Better user-interface then the original strtok. You may be interested in strsep, too. code.woboq.org/userspace/glibc/string/strsep.c.html
    $endgroup$
    – Neil Edelman
    2 hours ago










  • $begingroup$
    @NeilEdelman thanks I never saw this function before, I will check it.
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    It's not in the standard C libraries, but in POSIX, (any type of gcc.) However, like strtok, it obliterates the char to replace it with , so it's not the same.
    $endgroup$
    – Neil Edelman
    2 hours ago

















2












$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|improve this question









$endgroup$







  • 1




    $begingroup$
    Better user-interface then the original strtok. You may be interested in strsep, too. code.woboq.org/userspace/glibc/string/strsep.c.html
    $endgroup$
    – Neil Edelman
    2 hours ago










  • $begingroup$
    @NeilEdelman thanks I never saw this function before, I will check it.
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    It's not in the standard C libraries, but in POSIX, (any type of gcc.) However, like strtok, it obliterates the char to replace it with , so it's not the same.
    $endgroup$
    – Neil Edelman
    2 hours ago













2












2








2





$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|improve this question









$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|improve this question













share|improve this question











share|improve this question




share|improve this question










asked 4 hours ago









Accountant مAccountant م

1727




1727







  • 1




    $begingroup$
    Better user-interface then the original strtok. You may be interested in strsep, too. code.woboq.org/userspace/glibc/string/strsep.c.html
    $endgroup$
    – Neil Edelman
    2 hours ago










  • $begingroup$
    @NeilEdelman thanks I never saw this function before, I will check it.
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    It's not in the standard C libraries, but in POSIX, (any type of gcc.) However, like strtok, it obliterates the char to replace it with , so it's not the same.
    $endgroup$
    – Neil Edelman
    2 hours ago












  • 1




    $begingroup$
    Better user-interface then the original strtok. You may be interested in strsep, too. code.woboq.org/userspace/glibc/string/strsep.c.html
    $endgroup$
    – Neil Edelman
    2 hours ago










  • $begingroup$
    @NeilEdelman thanks I never saw this function before, I will check it.
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    It's not in the standard C libraries, but in POSIX, (any type of gcc.) However, like strtok, it obliterates the char to replace it with , so it's not the same.
    $endgroup$
    – Neil Edelman
    2 hours ago







1




1




$begingroup$
Better user-interface then the original strtok. You may be interested in strsep, too. code.woboq.org/userspace/glibc/string/strsep.c.html
$endgroup$
– Neil Edelman
2 hours ago




$begingroup$
Better user-interface then the original strtok. You may be interested in strsep, too. code.woboq.org/userspace/glibc/string/strsep.c.html
$endgroup$
– Neil Edelman
2 hours ago












$begingroup$
@NeilEdelman thanks I never saw this function before, I will check it.
$endgroup$
– Accountant م
2 hours ago




$begingroup$
@NeilEdelman thanks I never saw this function before, I will check it.
$endgroup$
– Accountant م
2 hours ago




1




1




$begingroup$
It's not in the standard C libraries, but in POSIX, (any type of gcc.) However, like strtok, it obliterates the char to replace it with , so it's not the same.
$endgroup$
– Neil Edelman
2 hours ago




$begingroup$
It's not in the standard C libraries, but in POSIX, (any type of gcc.) However, like strtok, it obliterates the char to replace it with , so it's not the same.
$endgroup$
– Neil Edelman
2 hours ago










2 Answers
2






active

oldest

votes


















1












$begingroup$

  • delimiterFound + strlen(delimiter) sounds like a bug. If the delimiter is longer than one character, *newString will point too far into the original, maybe even beyond the end. Correct me if I am wrong, delimiterFound + 1 is what you are actually after.



  • Modern C allows, and strongly encourages, to declare variables as close to their use a possible. Consider



    char * delimiterFound = strstr(string, delimiter);
    ....
    char * tok = malloc(tokLenght + 1);


    etc.



  • Always test that malloc didn't fail.



  • More spaces - around keywords, braces, etc - definitely improve readability:



     if (....) 
    ....
    else
    ....







share|improve this answer









$endgroup$








  • 1




    $begingroup$
    Thaaank you very much for these precious points, regarding the delimiter length bug, ummmm, I want to support long delimiters more than 1 characters like the boundary string in http requests that has content-type multi-part, and I don't think it's a bug because delimiterFound + strlen(delimiter) can never be after the 0 byte that terminates the original string!, right ? "fooDELIMITER" 3 + 12
    $endgroup$
    – Accountant م
    2 hours ago










  • $begingroup$
    @Accountantم Long delimiters here refer to, say ",;.", in where any character delimits the string on its own right.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    I didn't get it, I'm sorry, can you please give me an example input that can break this code, exploiting this bug ?
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    @Accountantم Sorry for not being clear. I should realize that your intentions are different (and read man strstr more carefully). Consider it my blinder - since you mentioned strtok, I expected the strtok semantics.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    It's my fault because I said it's strtok, I wanted strtok that can support delimiters more than 1 characters, because I need this feature a lot. So do you mean it's not a bug ??
    $endgroup$
    – Accountant م
    2 hours ago


















1












$begingroup$

From a readability viewpoint, you should use NULL instead of (char*) 0 as it is easier to recognize what you're trying to do. Also, the tokLenght misspells "length", and should probably be tokLength.



You leak memory, as the memory allocated to hold the returned string is never freed.






share|improve this answer









$endgroup$












  • $begingroup$
    Thank you very much I will use NULL from now on, and I will remember to free() memory , 'I miss PHP garbage collector :(', I didn't get the tokLength spelling note, aren't they the same ?
    $endgroup$
    – Accountant م
    2 hours ago







  • 1




    $begingroup$
    It's a matter of style, and including .h if you want to use NULL. However, you don't have to cast (char *)0, just use 0 (or NULL.) It knows from the return type.
    $endgroup$
    – Neil Edelman
    2 hours ago











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

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









1












$begingroup$

  • delimiterFound + strlen(delimiter) sounds like a bug. If the delimiter is longer than one character, *newString will point too far into the original, maybe even beyond the end. Correct me if I am wrong, delimiterFound + 1 is what you are actually after.



  • Modern C allows, and strongly encourages, to declare variables as close to their use a possible. Consider



    char * delimiterFound = strstr(string, delimiter);
    ....
    char * tok = malloc(tokLenght + 1);


    etc.



  • Always test that malloc didn't fail.



  • More spaces - around keywords, braces, etc - definitely improve readability:



     if (....) 
    ....
    else
    ....







share|improve this answer









$endgroup$








  • 1




    $begingroup$
    Thaaank you very much for these precious points, regarding the delimiter length bug, ummmm, I want to support long delimiters more than 1 characters like the boundary string in http requests that has content-type multi-part, and I don't think it's a bug because delimiterFound + strlen(delimiter) can never be after the 0 byte that terminates the original string!, right ? "fooDELIMITER" 3 + 12
    $endgroup$
    – Accountant م
    2 hours ago










  • $begingroup$
    @Accountantم Long delimiters here refer to, say ",;.", in where any character delimits the string on its own right.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    I didn't get it, I'm sorry, can you please give me an example input that can break this code, exploiting this bug ?
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    @Accountantم Sorry for not being clear. I should realize that your intentions are different (and read man strstr more carefully). Consider it my blinder - since you mentioned strtok, I expected the strtok semantics.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    It's my fault because I said it's strtok, I wanted strtok that can support delimiters more than 1 characters, because I need this feature a lot. So do you mean it's not a bug ??
    $endgroup$
    – Accountant م
    2 hours ago















1












$begingroup$

  • delimiterFound + strlen(delimiter) sounds like a bug. If the delimiter is longer than one character, *newString will point too far into the original, maybe even beyond the end. Correct me if I am wrong, delimiterFound + 1 is what you are actually after.



  • Modern C allows, and strongly encourages, to declare variables as close to their use a possible. Consider



    char * delimiterFound = strstr(string, delimiter);
    ....
    char * tok = malloc(tokLenght + 1);


    etc.



  • Always test that malloc didn't fail.



  • More spaces - around keywords, braces, etc - definitely improve readability:



     if (....) 
    ....
    else
    ....







share|improve this answer









$endgroup$








  • 1




    $begingroup$
    Thaaank you very much for these precious points, regarding the delimiter length bug, ummmm, I want to support long delimiters more than 1 characters like the boundary string in http requests that has content-type multi-part, and I don't think it's a bug because delimiterFound + strlen(delimiter) can never be after the 0 byte that terminates the original string!, right ? "fooDELIMITER" 3 + 12
    $endgroup$
    – Accountant م
    2 hours ago










  • $begingroup$
    @Accountantم Long delimiters here refer to, say ",;.", in where any character delimits the string on its own right.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    I didn't get it, I'm sorry, can you please give me an example input that can break this code, exploiting this bug ?
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    @Accountantم Sorry for not being clear. I should realize that your intentions are different (and read man strstr more carefully). Consider it my blinder - since you mentioned strtok, I expected the strtok semantics.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    It's my fault because I said it's strtok, I wanted strtok that can support delimiters more than 1 characters, because I need this feature a lot. So do you mean it's not a bug ??
    $endgroup$
    – Accountant م
    2 hours ago













1












1








1





$begingroup$

  • delimiterFound + strlen(delimiter) sounds like a bug. If the delimiter is longer than one character, *newString will point too far into the original, maybe even beyond the end. Correct me if I am wrong, delimiterFound + 1 is what you are actually after.



  • Modern C allows, and strongly encourages, to declare variables as close to their use a possible. Consider



    char * delimiterFound = strstr(string, delimiter);
    ....
    char * tok = malloc(tokLenght + 1);


    etc.



  • Always test that malloc didn't fail.



  • More spaces - around keywords, braces, etc - definitely improve readability:



     if (....) 
    ....
    else
    ....







share|improve this answer









$endgroup$



  • delimiterFound + strlen(delimiter) sounds like a bug. If the delimiter is longer than one character, *newString will point too far into the original, maybe even beyond the end. Correct me if I am wrong, delimiterFound + 1 is what you are actually after.



  • Modern C allows, and strongly encourages, to declare variables as close to their use a possible. Consider



    char * delimiterFound = strstr(string, delimiter);
    ....
    char * tok = malloc(tokLenght + 1);


    etc.



  • Always test that malloc didn't fail.



  • More spaces - around keywords, braces, etc - definitely improve readability:



     if (....) 
    ....
    else
    ....








share|improve this answer












share|improve this answer



share|improve this answer










answered 2 hours ago









vnpvnp

40.6k233103




40.6k233103







  • 1




    $begingroup$
    Thaaank you very much for these precious points, regarding the delimiter length bug, ummmm, I want to support long delimiters more than 1 characters like the boundary string in http requests that has content-type multi-part, and I don't think it's a bug because delimiterFound + strlen(delimiter) can never be after the 0 byte that terminates the original string!, right ? "fooDELIMITER" 3 + 12
    $endgroup$
    – Accountant م
    2 hours ago










  • $begingroup$
    @Accountantم Long delimiters here refer to, say ",;.", in where any character delimits the string on its own right.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    I didn't get it, I'm sorry, can you please give me an example input that can break this code, exploiting this bug ?
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    @Accountantم Sorry for not being clear. I should realize that your intentions are different (and read man strstr more carefully). Consider it my blinder - since you mentioned strtok, I expected the strtok semantics.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    It's my fault because I said it's strtok, I wanted strtok that can support delimiters more than 1 characters, because I need this feature a lot. So do you mean it's not a bug ??
    $endgroup$
    – Accountant م
    2 hours ago












  • 1




    $begingroup$
    Thaaank you very much for these precious points, regarding the delimiter length bug, ummmm, I want to support long delimiters more than 1 characters like the boundary string in http requests that has content-type multi-part, and I don't think it's a bug because delimiterFound + strlen(delimiter) can never be after the 0 byte that terminates the original string!, right ? "fooDELIMITER" 3 + 12
    $endgroup$
    – Accountant م
    2 hours ago










  • $begingroup$
    @Accountantم Long delimiters here refer to, say ",;.", in where any character delimits the string on its own right.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    I didn't get it, I'm sorry, can you please give me an example input that can break this code, exploiting this bug ?
    $endgroup$
    – Accountant م
    2 hours ago






  • 1




    $begingroup$
    @Accountantم Sorry for not being clear. I should realize that your intentions are different (and read man strstr more carefully). Consider it my blinder - since you mentioned strtok, I expected the strtok semantics.
    $endgroup$
    – vnp
    2 hours ago










  • $begingroup$
    It's my fault because I said it's strtok, I wanted strtok that can support delimiters more than 1 characters, because I need this feature a lot. So do you mean it's not a bug ??
    $endgroup$
    – Accountant م
    2 hours ago







1




1




$begingroup$
Thaaank you very much for these precious points, regarding the delimiter length bug, ummmm, I want to support long delimiters more than 1 characters like the boundary string in http requests that has content-type multi-part, and I don't think it's a bug because delimiterFound + strlen(delimiter) can never be after the 0 byte that terminates the original string!, right ? "fooDELIMITER" 3 + 12
$endgroup$
– Accountant م
2 hours ago




$begingroup$
Thaaank you very much for these precious points, regarding the delimiter length bug, ummmm, I want to support long delimiters more than 1 characters like the boundary string in http requests that has content-type multi-part, and I don't think it's a bug because delimiterFound + strlen(delimiter) can never be after the 0 byte that terminates the original string!, right ? "fooDELIMITER" 3 + 12
$endgroup$
– Accountant م
2 hours ago












$begingroup$
@Accountantم Long delimiters here refer to, say ",;.", in where any character delimits the string on its own right.
$endgroup$
– vnp
2 hours ago




$begingroup$
@Accountantم Long delimiters here refer to, say ",;.", in where any character delimits the string on its own right.
$endgroup$
– vnp
2 hours ago












$begingroup$
I didn't get it, I'm sorry, can you please give me an example input that can break this code, exploiting this bug ?
$endgroup$
– Accountant م
2 hours ago




$begingroup$
I didn't get it, I'm sorry, can you please give me an example input that can break this code, exploiting this bug ?
$endgroup$
– Accountant م
2 hours ago




1




1




$begingroup$
@Accountantم Sorry for not being clear. I should realize that your intentions are different (and read man strstr more carefully). Consider it my blinder - since you mentioned strtok, I expected the strtok semantics.
$endgroup$
– vnp
2 hours ago




$begingroup$
@Accountantم Sorry for not being clear. I should realize that your intentions are different (and read man strstr more carefully). Consider it my blinder - since you mentioned strtok, I expected the strtok semantics.
$endgroup$
– vnp
2 hours ago












$begingroup$
It's my fault because I said it's strtok, I wanted strtok that can support delimiters more than 1 characters, because I need this feature a lot. So do you mean it's not a bug ??
$endgroup$
– Accountant م
2 hours ago




$begingroup$
It's my fault because I said it's strtok, I wanted strtok that can support delimiters more than 1 characters, because I need this feature a lot. So do you mean it's not a bug ??
$endgroup$
– Accountant م
2 hours ago













1












$begingroup$

From a readability viewpoint, you should use NULL instead of (char*) 0 as it is easier to recognize what you're trying to do. Also, the tokLenght misspells "length", and should probably be tokLength.



You leak memory, as the memory allocated to hold the returned string is never freed.






share|improve this answer









$endgroup$












  • $begingroup$
    Thank you very much I will use NULL from now on, and I will remember to free() memory , 'I miss PHP garbage collector :(', I didn't get the tokLength spelling note, aren't they the same ?
    $endgroup$
    – Accountant م
    2 hours ago







  • 1




    $begingroup$
    It's a matter of style, and including .h if you want to use NULL. However, you don't have to cast (char *)0, just use 0 (or NULL.) It knows from the return type.
    $endgroup$
    – Neil Edelman
    2 hours ago















1












$begingroup$

From a readability viewpoint, you should use NULL instead of (char*) 0 as it is easier to recognize what you're trying to do. Also, the tokLenght misspells "length", and should probably be tokLength.



You leak memory, as the memory allocated to hold the returned string is never freed.






share|improve this answer









$endgroup$












  • $begingroup$
    Thank you very much I will use NULL from now on, and I will remember to free() memory , 'I miss PHP garbage collector :(', I didn't get the tokLength spelling note, aren't they the same ?
    $endgroup$
    – Accountant م
    2 hours ago







  • 1




    $begingroup$
    It's a matter of style, and including .h if you want to use NULL. However, you don't have to cast (char *)0, just use 0 (or NULL.) It knows from the return type.
    $endgroup$
    – Neil Edelman
    2 hours ago













1












1








1





$begingroup$

From a readability viewpoint, you should use NULL instead of (char*) 0 as it is easier to recognize what you're trying to do. Also, the tokLenght misspells "length", and should probably be tokLength.



You leak memory, as the memory allocated to hold the returned string is never freed.






share|improve this answer









$endgroup$



From a readability viewpoint, you should use NULL instead of (char*) 0 as it is easier to recognize what you're trying to do. Also, the tokLenght misspells "length", and should probably be tokLength.



You leak memory, as the memory allocated to hold the returned string is never freed.







share|improve this answer












share|improve this answer



share|improve this answer










answered 3 hours ago









1201ProgramAlarm1201ProgramAlarm

3,6532925




3,6532925











  • $begingroup$
    Thank you very much I will use NULL from now on, and I will remember to free() memory , 'I miss PHP garbage collector :(', I didn't get the tokLength spelling note, aren't they the same ?
    $endgroup$
    – Accountant م
    2 hours ago







  • 1




    $begingroup$
    It's a matter of style, and including .h if you want to use NULL. However, you don't have to cast (char *)0, just use 0 (or NULL.) It knows from the return type.
    $endgroup$
    – Neil Edelman
    2 hours ago
















  • $begingroup$
    Thank you very much I will use NULL from now on, and I will remember to free() memory , 'I miss PHP garbage collector :(', I didn't get the tokLength spelling note, aren't they the same ?
    $endgroup$
    – Accountant م
    2 hours ago







  • 1




    $begingroup$
    It's a matter of style, and including .h if you want to use NULL. However, you don't have to cast (char *)0, just use 0 (or NULL.) It knows from the return type.
    $endgroup$
    – Neil Edelman
    2 hours ago















$begingroup$
Thank you very much I will use NULL from now on, and I will remember to free() memory , 'I miss PHP garbage collector :(', I didn't get the tokLength spelling note, aren't they the same ?
$endgroup$
– Accountant م
2 hours ago





$begingroup$
Thank you very much I will use NULL from now on, and I will remember to free() memory , 'I miss PHP garbage collector :(', I didn't get the tokLength spelling note, aren't they the same ?
$endgroup$
– Accountant م
2 hours ago





1




1




$begingroup$
It's a matter of style, and including .h if you want to use NULL. However, you don't have to cast (char *)0, just use 0 (or NULL.) It knows from the return type.
$endgroup$
– Neil Edelman
2 hours ago




$begingroup$
It's a matter of style, and including .h if you want to use NULL. However, you don't have to cast (char *)0, just use 0 (or NULL.) It knows from the return type.
$endgroup$
– Neil Edelman
2 hours ago

















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

Are there any AGPL-style licences that require source code modifications to be public? Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Force derivative works to be publicAre there any GPL like licenses for Apple App Store?Do you violate the GPL if you provide source code that cannot be compiled?GPL - is it distribution to use libraries in an appliance loaned to customers?Distributing App for free which uses GPL'ed codeModifications of server software under GPL, with web/CLI interfaceDoes using an AGPLv3-licensed library prevent me from dual-licensing my own source code?Can I publish only select code under GPLv3 from a private project?Is there published precedent regarding the scope of covered work that uses AGPL software?If MIT licensed code links to GPL licensed code what should be the license of the resulting binary program?If I use a public API endpoint that has its source code licensed under AGPL in my app, do I need to disclose my source?

2013 GY136 Descoberta | Órbita | Referências Menu de navegação«List Of Centaurs and Scattered-Disk Objects»«List of Known Trans-Neptunian Objects»

Button changing it's text & action. Good or terrible? The 2019 Stack Overflow Developer Survey Results Are Inchanging text on user mouseoverShould certain functions be “hard to find” for powerusers to discover?Custom liking function - do I need user login?Using different checkbox style for different checkbox behaviorBest Practices: Save and Exit in Software UIInteraction with remote validated formMore efficient UI to progress the user through a complicated process?Designing a popup notice for a gameShould bulk-editing functions be hidden until a table row is selected, or is there a better solution?Is it bad practice to disable (replace) the context menu?