K&Rを読もう(35) 演習 3-2 特殊文字のエスケープ

なんだか危険な香りのする問題。

演習 3-2

\n,\tを\\n,\\tに変換する問題。

escape(s, t)だと、問題がありそうな関数なので、mallocを使ってメモリを確保した。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *escape(char *s);

int main(void)
{
    char *e;

    e = escape("aa\nbb\tcc\ndd\t");
    printf ("%s\n", e);
    free(e);

    return EXIT_SUCCESS;
}

char *escape(char *s)
{
    char *e = malloc(2 * sizeof (char) * strlen(s) + sizeof (char));
    char *head = e;

    for(;*s != '\0'; s++, e++) {
        switch (*s) {
            default   : *e = *s; break;
            case '\n' : *e++ = '\\'; *e = 'n'; break;
            case '\t' : *e++ = '\\'; *e = 't'; break;
        }
    }
    *e = '\0';

    return head;
}

リストがホシィ。

逆も同じようなものなのでパス!