Loading collection data...
Collections are a way for you to organize kata so that you can create your own training routines. Every collection you create is public and automatically sharable with other warriors. After you have added a few kata to a collection you and others can train on the kata contained within the collection.
Get started now by creating a new collection.
Why incur the overhead of incrementing "*sz" multiple times when you already need to know it for the malloc()?
This comment is hidden because it contains spoiler information about the solution
This comment is hidden because it contains spoiler information about the solution
This is absolutely NOT "best practice", nor is it clever, as it's modifying a const string it will typically crash.
it crashes when you run it against the sample tests (button
TEST
), and passes when you run it against the full tests (buttonATTEMPT
). The sample and full tests are independent (they are in separate files).Trainer
page; they are only here so that you can get an idea of how your solution is called and which kind of inputs you can expect.usually, the sample tests are also copied to the full tests suite, but this is just a convention and authors can write tests differently. In this particular kata, the author of the C version did not do this: the sample tests call the user function with read-only string literals (which crashes this solution), but the full tests call it with mutable strings, so this solution can get away with removing
const
Thank you for the good explanation. But my question was, why exactly this above solution does not execute properly? If I run it against the tests of this Kata, I get the SIGSEGV. Did some compiler change here?
this solution casts away
const
ness, which is mind-bogglingly bad and should never be done. it does that to pass the string to thestrtok()
function, which mutates the string it receives as argument.You probably tried to call this solution on a read-only string. on most platforms, string literals are placed into the
.rodata
(Read-Only Data) section of a program, which is where the compiler stores compile-time constants. attempting to modifying a.rodata
object at runtime results in a segmentation fault (the OS crashes your program)wrong:
correct:
This solution gives me a SIGSEGV (11) error. Same as my original solution did.
What is wrong?
This comment is hidden because it contains spoiler information about the solution
Is the default return value of a function an integer?
This comment is hidden because it contains spoiler information about the solution
That is true. Forked version is better.
This wastes memory (as many bytes as the number of vowels in the string).
another way without the parentheses: ++*sz;
(this will increment the value fetched by the pointer, rather than the address after fetching the value)
Someone else has made the same comment already: s is a const char* parameter. If you cast it to a char*, you allow that it is modified. I think this smells, even if strtok does not change s.
Loading more items...