So I have a function that takes a string, and strips out special format characters, and assigns it to another string for later processing.
A sample call would be:
act_new("$t does $d");
It should strip out the $t and the $d and leave the second string as " does ", but its not assigning anything. I am getting back into programming after quite a few years of inactivity, and this is someone elses code (A MUD codebase, Rom), but I feel like I am missing something fundamental with pointer assignments. Any tips?
(This is truncated code, the rest has no operations on str or point until much later)
void act_new(const char *format)
{
const char *str;
char *point;
str = format;
while ( *str != '\0' ) {
if ( *str != '$' ) {
*point++ = *str++;
continue;
}
}
}
You need to increment
strevery time through the loop, not only when you assign topoint. Otherwise you end up in an infinite loop when the character doesn't match theifcondition.You also want to skip the character after
$, so you have to incrementstrtwice when you encounter$.The code is simpler if you use a
forloop and array indexing rather than pointer arithmetic.