エスケープ文字を文字に変換する

K&R本 演習3-2

改行文字やタブのような文字を目で見えるエスケープ文字\nや\tに変換しながら、sをtにコピーするような関数escape(s,t)を書け。switchを使うこと。

#include <stdio.h>

void escape(const char *s,char *t) {
    for(;*s;++s){
        switch(*s){
            case '\t':
                *t++ = '\\';
                *t++ = 't';
                break;
            case '\n':
                *t++ = '\\';
                *t++ = 'n';
                break;
            default:
                *t++ = *s;
        }
    }
    *t = '\0';
}

int main (void) {
    char str[1000];
    char t[1000];
    
    while( fgets(str,sizeof(str),stdin) != NULL ) {
        escape(str,t);
        printf("%s\n",t);
    }
}
$ cat main.c | main
#include <stdio.h>\n
\n
void escape(const char *s,char *t) {\n
\tfor(;*s;++s){\n
\t\tswitch(*s){\n
\t\t\tcase '\t':\n
\t\t\t\t*t++ = '\\';\n
\t\t\t\t*t++ = 't';\n
\t\t\t\tbreak;\n
\t\t\tcase '\n':\n
\t\t\t\t*t++ = '\\';\n
\t\t\t\t*t++ = 'n';\n
\t\t\t\tbreak;\n
\t\t\tdefault:\n
\t\t\t\t*t++ = *s;\n
\t\t}\n
\t}\n
\t*t = '\0';\n
}\n
\n
int main (void) {\n
\tchar str[1000];\n
\tchar t[1000];\n
\t\n
\twhile( fgets(str,sizeof(str),stdin) != NULL ) {\n
\t\tescape(str,t);\n
\t\tprintf("%s\n",t);\n
\t}\n
}\n
\n

できました。結果を見やすくするために改行コード入れてます。