The purpose of the code is to make dest
point just after the last character of the destination string so that the characters from the source string can be added from that point and forward.
The bad thing about while(*dest++)
is that it always increments dest
, i.e. even when *dest
is NUL ('\0'
), dest
will be incremented. So, in order to “get back” to the NUL, a decrement of dest
is needed after the loop.
The code:
while(*dest++){
}
dest--;
is equivalent to:
while(1){
char tmp = *dest; // Save current value in tmp
dest++; // Increment dest
if (tmp == '\0') break; // Check tmp and stop the loop if it's NUL
}
dest--; // Compensate for the unwanted increment
The code should just have been:
while(*dest) dest++;
In that way the increment is only done when needed (so there is no longer a need for the decrement)
OT:
Make sure to initialize str1
to something – at least do:
char str1[20] = "";