strTok function (thread safe, supports empty tokens, doesn't change string)String case reverse function in...
Can a planet have a different gravitational pull depending on its location in orbit around its sun?
What's the difference between repeating elections every few years and repeating a referendum after a few years?
Why was the "bread communication" in the arena of Catching Fire left out in the movie?
"listening to me about as much as you're listening to this pole here"
Where to refill my bottle in India?
What is the meaning of "of trouble" in the following sentence?
How do I create uniquely male characters?
Why do UK politicians seemingly ignore opinion polls on Brexit?
Why do we use polarized capacitors?
Is every set a filtered colimit of finite sets?
Is there a way to make member function NOT callable from constructor?
Why did the Germans forbid the possession of pet pigeons in Rostov-on-Don in 1941?
How can I fix this gap between bookcases I made?
LWC and complex parameters
How to deal with fear of taking dependencies
What does it exactly mean if a random variable follows a distribution
What is GPS' 19 year rollover and does it present a cybersecurity issue?
What are the advantages and disadvantages of running one shots compared to campaigns?
Is there a name of the flying bionic bird?
How many letters suffice to construct words with no repetition?
Finding files for which a command fails
Need help identifying/translating a plaque in Tangier, Morocco
Are cabin dividers used to "hide" the flex of the airplane?
Crop image to path created in TikZ?
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 days ago
$begingroup$
@NeilEdelman thanks I never saw this function before, I will check it.
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's not in the standardClibraries, but inPOSIX, (any type ofgcc.) However, likestrtok, it obliterates thecharto replace it with, so it's not the same.
$endgroup$
– Neil Edelman
2 days 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 Apr 6 at 0:03
Accountant مAccountant م
22418
22418
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 days ago
$begingroup$
@NeilEdelman thanks I never saw this function before, I will check it.
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's not in the standardClibraries, but inPOSIX, (any type ofgcc.) However, likestrtok, it obliterates thecharto replace it with, so it's not the same.
$endgroup$
– Neil Edelman
2 days 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 days ago
$begingroup$
@NeilEdelman thanks I never saw this function before, I will check it.
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's not in the standardClibraries, but inPOSIX, (any type ofgcc.) However, likestrtok, it obliterates thecharto replace it with, so it's not the same.
$endgroup$
– Neil Edelman
2 days 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 days 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 days ago
$begingroup$
@NeilEdelman thanks I never saw this function before, I will check it.
$endgroup$
– Accountant م
2 days ago
$begingroup$
@NeilEdelman thanks I never saw this function before, I will check it.
$endgroup$
– Accountant م
2 days 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 days 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 days 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,*newStringwill point too far into the original, maybe even beyond the end. Correct me if I am wrong,delimiterFound + 1is 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
mallocdidn'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 days ago
$begingroup$
@Accountantم Long delimiters here refer to, say",;.", in where any character delimits the string on its own right.
$endgroup$
– vnp
2 days 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 days ago
1
$begingroup$
@Accountantم Sorry for not being clear. I should realize that your intentions are different (and readman strstrmore carefully). Consider it my blinder - since you mentionedstrtok, I expected thestrtoksemantics.
$endgroup$
– vnp
2 days ago
$begingroup$
It's my fault because I said it'sstrtok, I wantedstrtokthat 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 days 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 thetokLengthspelling note, aren't they the same ?
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's a matter of style, and including.hif 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 days ago
1
$begingroup$
@Accountantم For the spelling, you used G-H-T when the correct spelling is G-T-H (the last two letters are swapped). I've made that typo before. I find having identifiers spelled correctly helps with reading and finding them, although the autocomplete in IDEs mitigates that a little but propagates the misspellings.
$endgroup$
– 1201ProgramAlarm
2 days ago
$begingroup$
@1201ProgramAlarm ooh, 😮 how come I didn't notice this after revising it multiple times!, thanks.
$endgroup$
– Accountant م
2 days 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,*newStringwill point too far into the original, maybe even beyond the end. Correct me if I am wrong,delimiterFound + 1is 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
mallocdidn'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 days ago
$begingroup$
@Accountantم Long delimiters here refer to, say",;.", in where any character delimits the string on its own right.
$endgroup$
– vnp
2 days 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 days ago
1
$begingroup$
@Accountantم Sorry for not being clear. I should realize that your intentions are different (and readman strstrmore carefully). Consider it my blinder - since you mentionedstrtok, I expected thestrtoksemantics.
$endgroup$
– vnp
2 days ago
$begingroup$
It's my fault because I said it'sstrtok, I wantedstrtokthat 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 days ago
|
show 1 more comment
$begingroup$
delimiterFound + strlen(delimiter)sounds like a bug. If the delimiter is longer than one character,*newStringwill point too far into the original, maybe even beyond the end. Correct me if I am wrong,delimiterFound + 1is 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
mallocdidn'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 days ago
$begingroup$
@Accountantم Long delimiters here refer to, say",;.", in where any character delimits the string on its own right.
$endgroup$
– vnp
2 days 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 days ago
1
$begingroup$
@Accountantم Sorry for not being clear. I should realize that your intentions are different (and readman strstrmore carefully). Consider it my blinder - since you mentionedstrtok, I expected thestrtoksemantics.
$endgroup$
– vnp
2 days ago
$begingroup$
It's my fault because I said it'sstrtok, I wantedstrtokthat 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 days ago
|
show 1 more comment
$begingroup$
delimiterFound + strlen(delimiter)sounds like a bug. If the delimiter is longer than one character,*newStringwill point too far into the original, maybe even beyond the end. Correct me if I am wrong,delimiterFound + 1is 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
mallocdidn'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,*newStringwill point too far into the original, maybe even beyond the end. Correct me if I am wrong,delimiterFound + 1is 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
mallocdidn't fail.
More spaces - around keywords, braces, etc - definitely improve readability:
if (....) {
....
} else {
....
}
answered Apr 6 at 1:24
vnpvnp
40.7k233103
40.7k233103
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 days ago
$begingroup$
@Accountantم Long delimiters here refer to, say",;.", in where any character delimits the string on its own right.
$endgroup$
– vnp
2 days 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 days ago
1
$begingroup$
@Accountantم Sorry for not being clear. I should realize that your intentions are different (and readman strstrmore carefully). Consider it my blinder - since you mentionedstrtok, I expected thestrtoksemantics.
$endgroup$
– vnp
2 days ago
$begingroup$
It's my fault because I said it'sstrtok, I wantedstrtokthat 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 days 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 days ago
$begingroup$
@Accountantم Long delimiters here refer to, say",;.", in where any character delimits the string on its own right.
$endgroup$
– vnp
2 days 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 days ago
1
$begingroup$
@Accountantم Sorry for not being clear. I should realize that your intentions are different (and readman strstrmore carefully). Consider it my blinder - since you mentionedstrtok, I expected thestrtoksemantics.
$endgroup$
– vnp
2 days ago
$begingroup$
It's my fault because I said it'sstrtok, I wantedstrtokthat 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 days 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 days 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 days ago
$begingroup$
@Accountantم Long delimiters here refer to, say
",;.", in where any character delimits the string on its own right.$endgroup$
– vnp
2 days ago
$begingroup$
@Accountantم Long delimiters here refer to, say
",;.", in where any character delimits the string on its own right.$endgroup$
– vnp
2 days 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 days 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 days 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 days 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 days 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 days 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 days 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 thetokLengthspelling note, aren't they the same ?
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's a matter of style, and including.hif 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 days ago
1
$begingroup$
@Accountantم For the spelling, you used G-H-T when the correct spelling is G-T-H (the last two letters are swapped). I've made that typo before. I find having identifiers spelled correctly helps with reading and finding them, although the autocomplete in IDEs mitigates that a little but propagates the misspellings.
$endgroup$
– 1201ProgramAlarm
2 days ago
$begingroup$
@1201ProgramAlarm ooh, 😮 how come I didn't notice this after revising it multiple times!, thanks.
$endgroup$
– Accountant م
2 days 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 thetokLengthspelling note, aren't they the same ?
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's a matter of style, and including.hif 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 days ago
1
$begingroup$
@Accountantم For the spelling, you used G-H-T when the correct spelling is G-T-H (the last two letters are swapped). I've made that typo before. I find having identifiers spelled correctly helps with reading and finding them, although the autocomplete in IDEs mitigates that a little but propagates the misspellings.
$endgroup$
– 1201ProgramAlarm
2 days ago
$begingroup$
@1201ProgramAlarm ooh, 😮 how come I didn't notice this after revising it multiple times!, thanks.
$endgroup$
– Accountant م
2 days 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 Apr 6 at 0:57
1201ProgramAlarm1201ProgramAlarm
3,7232925
3,7232925
$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 thetokLengthspelling note, aren't they the same ?
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's a matter of style, and including.hif 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 days ago
1
$begingroup$
@Accountantم For the spelling, you used G-H-T when the correct spelling is G-T-H (the last two letters are swapped). I've made that typo before. I find having identifiers spelled correctly helps with reading and finding them, although the autocomplete in IDEs mitigates that a little but propagates the misspellings.
$endgroup$
– 1201ProgramAlarm
2 days ago
$begingroup$
@1201ProgramAlarm ooh, 😮 how come I didn't notice this after revising it multiple times!, thanks.
$endgroup$
– Accountant م
2 days 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 thetokLengthspelling note, aren't they the same ?
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's a matter of style, and including.hif 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 days ago
1
$begingroup$
@Accountantم For the spelling, you used G-H-T when the correct spelling is G-T-H (the last two letters are swapped). I've made that typo before. I find having identifiers spelled correctly helps with reading and finding them, although the autocomplete in IDEs mitigates that a little but propagates the misspellings.
$endgroup$
– 1201ProgramAlarm
2 days ago
$begingroup$
@1201ProgramAlarm ooh, 😮 how come I didn't notice this after revising it multiple times!, thanks.
$endgroup$
– Accountant م
2 days 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 days 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 days 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 days 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 days ago
1
1
$begingroup$
@Accountantم For the spelling, you used G-H-T when the correct spelling is G-T-H (the last two letters are swapped). I've made that typo before. I find having identifiers spelled correctly helps with reading and finding them, although the autocomplete in IDEs mitigates that a little but propagates the misspellings.
$endgroup$
– 1201ProgramAlarm
2 days ago
$begingroup$
@Accountantم For the spelling, you used G-H-T when the correct spelling is G-T-H (the last two letters are swapped). I've made that typo before. I find having identifiers spelled correctly helps with reading and finding them, although the autocomplete in IDEs mitigates that a little but propagates the misspellings.
$endgroup$
– 1201ProgramAlarm
2 days ago
$begingroup$
@1201ProgramAlarm ooh, 😮 how come I didn't notice this after revising it multiple times!, thanks.
$endgroup$
– Accountant م
2 days ago
$begingroup$
@1201ProgramAlarm ooh, 😮 how come I didn't notice this after revising it multiple times!, thanks.
$endgroup$
– Accountant م
2 days 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 days ago
$begingroup$
@NeilEdelman thanks I never saw this function before, I will check it.
$endgroup$
– Accountant م
2 days ago
1
$begingroup$
It's not in the standard
Clibraries, but inPOSIX, (any type ofgcc.) However, likestrtok, it obliterates thecharto replace it with, so it's not the same.$endgroup$
– Neil Edelman
2 days ago