void escape(char * s, char * t) {
int i, j;
i = j = 0;
while ( t[i] ) {
/* Translate the special character, if we have one */
switch( t[i] ) {
case'\n':
s[j++] = '\\';
s[j] = 'n';
break;
case'\t':
s[j++] = '\\';
s[j] = 't';
break;
case'\a':
s[j++] = '\\';
s[j] = 'a';
break;
case'\b':
s[j++] = '\\';
s[j] = 'b';
break;
case'\f':
s[j++] = '\\';
s[j] = 'f';
break;
case'\r':
s[j++] = '\\';
s[j] = 'r';
break;
case'\v':
s[j++] = '\\';
s[j] = 'v';
break;
case'\\':
s[j++] = '\\';
s[j] = '\\';
break;
case'\"':
s[j++] = '\\';
s[j] = '\"';
break;
default:
/* This is not a special character, so just copy it */
s[j] = t[i];
break;
}
++i;
++j;
}
s[j] = t[i]; /* Don't forget the null character */
}
Notice the while loop evaluates the current value in t to true or false. When we hit the null terminator, does that get evaluated as 0 and hence evaluates as a falsy value so the while loop exits?