I solved the codewars training as below. I'm getting an error message, what's wrong in the code? I don't know what is going on, so please let me know. But it is capitalizing every word!
I passed: 111 tests Failed: 1 Errors: 1 Exit Code: 1
**Test Crashed Caught unexpected signal: SIGSEGV (11). Invalid memory access. **
It is a Jaden Casing Strings (It is capitalizing every word!)
char *to_jaden_case (char *jaden_case, const char *string){
// write to jaden_case and return it
int i = 0;
if(*(string) <= 'z' && *(string) >= 'a'){
*(jaden_case) = *(string) - 32;
}
else{
*(jaden_case) = *(string);
}
for(i = 1;*(string + i) != '\0'; i++){
if( *(string + i - 1) == ' '){
if(*(string + i) <= 'z' && *(string + i) >= 'a'){
*(jaden_case + i) = *(string + i) - 32;
}
else{
*(jaden_case + i) = *(string + i);
}
}
else{
*(jaden_case + i) = *(string + i);
}
}
*(jaden_case + i) = '\0';
return jaden_case;
}
The first test case is the empty string:
In that case, the following
will cause Undefined Behaviour when accessing an invalid index via
string[1].Consider using the functions found in
<ctype.h>, such asisspaceand especiallytoupperto solve this.Generally, consider using the syntax
foo[n], instead of*(foo + n).That said, the minimal change required for your code is to place the
forloop inside a guardingifthat checks if the string is at least one character long.I might suggest doing this, and then having a look at the more well received solutions.