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
Replacing matching entries in one column of a file by another column from a different file
When a company launches a new product do they "come out" with a new product or do they "come up" with a new product?
Can a Cauchy sequence converge for one metric while not converging for another?
Which country benefited the most from UN Security Council vetoes?
What would happen to a modern skyscraper if it rains micro blackholes?
What are these boxed doors outside store fronts in New York?
Why can't I see bouncing of a switch on an oscilloscope?
What's the output of a record needle playing an out-of-speed record
Languages that we cannot (dis)prove to be Context-Free
Arrow those variables!
Watching something be written to a file live with tail
Malcev's paper "On a class of homogeneous spaces" in English
How can I make my BBEG immortal short of making them a Lich or Vampire?
Alternative to sending password over mail?
Accidentally leaked the solution to an assignment, what to do now? (I'm the prof)
Why can't we play rap on piano?
Today is the Center
I'm flying to France today and my passport expires in less than 2 months
How to determine what difficulty is right for the game?
Is it legal for company to use my work email to pretend I still work there?
Was any UN Security Council vote triple-vetoed?
How much RAM could one put in a typical 80386 setup?
Intersection point of 2 lines defined by 2 points each
strTok function (thread safe, supports empty tokens, doesn't change string)
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;
$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);
beginner c strings
$endgroup$
add a comment |
$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);
beginner c strings
$endgroup$
1
$begingroup$
Better user-interface then the originalstrtok
. You may be interested instrsep
, 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 standardC
libraries, but inPOSIX
, (any type ofgcc
.) However, likestrtok
, it obliterates thechar
to replace it with, so it's not the same.
$endgroup$
– Neil Edelman
2 hours ago
add a comment |
$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);
beginner c strings
$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
beginner c strings
asked 4 hours ago
Accountant مAccountant م
1727
1727
1
$begingroup$
Better user-interface then the originalstrtok
. You may be interested instrsep
, 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 standardC
libraries, but inPOSIX
, (any type ofgcc
.) However, likestrtok
, it obliterates thechar
to replace it with, so it's not the same.
$endgroup$
– Neil Edelman
2 hours ago
add a comment |
1
$begingroup$
Better user-interface then the originalstrtok
. You may be interested instrsep
, 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 standardC
libraries, but inPOSIX
, (any type ofgcc
.) However, likestrtok
, it obliterates thechar
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
add a comment |
2 Answers
2
active
oldest
votes
$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
....
$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 becausedelimiterFound + 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 readman strstr
more carefully). Consider it my blinder - since you mentionedstrtok
, I expected thestrtok
semantics.
$endgroup$
– vnp
2 hours ago
$begingroup$
It's my fault because I said it'sstrtok
, I wantedstrtok
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
|
show 1 more comment
$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.
$endgroup$
$begingroup$
Thank you very much I will use NULL from now on, and I will remember tofree()
memory , 'I miss PHP garbage collector :(', I didn't get thetokLength
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 useNULL
. However, you don't have to cast(char *)0
, just use0
(orNULL
.) It knows from the return type.
$endgroup$
– Neil Edelman
2 hours ago
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
$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
....
$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 becausedelimiterFound + 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 readman strstr
more carefully). Consider it my blinder - since you mentionedstrtok
, I expected thestrtok
semantics.
$endgroup$
– vnp
2 hours ago
$begingroup$
It's my fault because I said it'sstrtok
, I wantedstrtok
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
|
show 1 more comment
$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
....
$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 becausedelimiterFound + 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 readman strstr
more carefully). Consider it my blinder - since you mentionedstrtok
, I expected thestrtok
semantics.
$endgroup$
– vnp
2 hours ago
$begingroup$
It's my fault because I said it'sstrtok
, I wantedstrtok
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
|
show 1 more comment
$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
....
$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
....
answered 3 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 becausedelimiterFound + 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 readman strstr
more carefully). Consider it my blinder - since you mentionedstrtok
, I expected thestrtok
semantics.
$endgroup$
– vnp
2 hours ago
$begingroup$
It's my fault because I said it'sstrtok
, I wantedstrtok
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
|
show 1 more comment
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 becausedelimiterFound + 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 readman strstr
more carefully). Consider it my blinder - since you mentionedstrtok
, I expected thestrtok
semantics.
$endgroup$
– vnp
2 hours ago
$begingroup$
It's my fault because I said it'sstrtok
, I wantedstrtok
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
|
show 1 more comment
$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.
$endgroup$
$begingroup$
Thank you very much I will use NULL from now on, and I will remember tofree()
memory , 'I miss PHP garbage collector :(', I didn't get thetokLength
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 useNULL
. However, you don't have to cast(char *)0
, just use0
(orNULL
.) It knows from the return type.
$endgroup$
– Neil Edelman
2 hours ago
add a comment |
$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.
$endgroup$
$begingroup$
Thank you very much I will use NULL from now on, and I will remember tofree()
memory , 'I miss PHP garbage collector :(', I didn't get thetokLength
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 useNULL
. However, you don't have to cast(char *)0
, just use0
(orNULL
.) It knows from the return type.
$endgroup$
– Neil Edelman
2 hours ago
add a comment |
$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.
$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.
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 tofree()
memory , 'I miss PHP garbage collector :(', I didn't get thetokLength
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 useNULL
. However, you don't have to cast(char *)0
, just use0
(orNULL
.) It knows from the return type.
$endgroup$
– Neil Edelman
2 hours ago
add a comment |
$begingroup$
Thank you very much I will use NULL from now on, and I will remember tofree()
memory , 'I miss PHP garbage collector :(', I didn't get thetokLength
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 useNULL
. However, you don't have to cast(char *)0
, just use0
(orNULL
.) 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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
1
$begingroup$
Better user-interface then the original
strtok
. You may be interested instrsep
, 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 inPOSIX
, (any type ofgcc
.) However, likestrtok
, it obliterates thechar
to replace it with, so it's not the same.
$endgroup$
– Neil Edelman
2 hours ago