Обратные слеши в строковых литералах необходимо экранировать;вместо "\0"
, вам нужно "\\0"
.
Таблица поиска может сделать это менее болезненным:
const char *ecs[256] = {NULL}; // assumes ASCII - may not be a valid assumption
int c;
ecs['\0'] = "\\0";
ecs['\a'] = "\\a";
ecs['\b'] = "\\b";
...
while ((c = fgetc(fp)) != EOF)
{
if (ecs[c] == NULL)
printf("%c", c);
else
printf("%s", ecs[c]);
}
Да, большинство записей в ecs
будутНОЛЬ;обмен состоит в том, что мне не нужно беспокоиться о сопоставлении значения символа с индексом массива.