Нет, не существует какой-либо стандартной функции для создания версии строки с исходным кодом.Но вы можете использовать функцию iscntrl
для ее написания или просто использовать ключевое слово switch
.
Но, если ваша программа не записывает исходный файл C, предназначенный для запуска через компилятор, вы не сможетеНужно работать с экранированными строками.printf
не обрабатывает escape-последовательности символов, только вставки переменных (%d
, %s
и т. Д.)
В частности, следующие выходные данные дают одинаковый результат:
printf("\tHello World\n");
и
const char* str = "\tHello World\n";
printf(str);
и
const char* str = "\tHello World\n";
printf("%s", str);
Второй вариант не очень хорошая идея, потому что, если str
содержит %
, ваша программа выдаст неправильный вывод и может привести к сбою.
РЕДАКТИРОВАТЬ: Для создания версии исходного кода, есть несколько подходов:
Более простой, но менее читаемый вывод:
if (iscntrl(ch) || ch == '\\' || ch == '\"' || ch == '\'') {
fprintf(outf, "\\%03o", ch);
}
else
fputc(ch, outf);
Более читаемые результаты:
switch (ch) {
case '\"':
fputs("\\\"", outf);
break;
case '\'':
fputs("\\\'", outf);
break;
case '\\':
fputs("\\\\", outf);
break;
case '\a':
fputs("\\a", outf);
break;
case '\b':
fputs("\\b", outf);
break;
case '\n':
fputs("\\n", outf);
break;
case '\t':
fputs("\\t", outf);
break;
// and so on
default:
if (iscntrl(ch)) fprintf(outf, "\\%03o", ch);
else fputc(ch, outf);
}