Вывод escape-последовательности из переменной

Есть строка которая берется из файла, и в ней содержатся escape-последовательности, например: char *ptr="bla \n bla"! Если printf("%s", ptr) то будет с новой строки все, а я хочу чтобы вывелось все точно так же как строка. Есть идея бежать по строке и если по ascii '10' то печатать то что надо, if и прочее. Есть другие способы вывести нв стандартный вывод в точности как строка на Си и C++ Например на python выглядело бы так print(repr(ptr))


Ответы (2 шт):

Автор решения: Harry

Если я правильно понимаю, вам надо что-то вроде этого?

void out(const char * s)
{
    for(;*s;++s)
    {
        char esc = ' ';
        switch(*s)
        {
        case 0x07: esc = 'a'; break;
        case 0x08: esc = 'b'; break;
        case 0x09: esc = 't'; break;
        case 0x0A: esc = 'n'; break;
        case 0x0B: esc = 'v'; break;
        case 0x0C: esc = 'f'; break;
        case 0x0D: esc = 'r'; break;
        case 0x5C: esc = '\\'; break;
        case 0x27: esc = '\''; break;
        case 0x22: esc = '\"'; break;
        }
        if (esc == ' ') putchar(*s);
        else { putchar('\\'); putchar(esc); }
    }
}
→ Ссылка
Автор решения: Mikhailo

Как написал Harry, можно и так:

void recode(const char* s) {
    for (; *s; ++s) {
        char code[] = "\x07\x08\x09\x0A\x0B\x0C\x0D\x22\x27\x5C";
        char* c = strchr(code, *s);

        if (c) {
            putchar('\\');
            putchar("abtnvfr\"\'\\"[c - code]);
            }
        else putchar(*s);
        }
    }
→ Ссылка