This doesn't really have anything to do with printf. The C11 standard lists escape sequences in §5.2.2, and the list consists of \a, \b, \f, \n, \r, \t and \v. As an extension, GCC considers \e to be an escape sequence which stands for the ASCII character Esc (\E may work as well, or your compiler may support neither of them. Consult the documentation for your compiler). What follows are non-portable control sequences. They are not guaranteed to work the same in all terminals, or even work at all. The best way to know is to consult the documentation for your system.
§6.4.4.4 also describes octal escape sequences. For example, \033, where 033 is 27 in decimal, and therefore the escape character in ASCII. Similarly, you can use \x1b, which is a hexadecimal escape sequence specifying the same character.
If we inspect the output of the program with od -c, it shows 033.
(✿´‿`) ~/test> ./a.out | od -c 0000000 033 [ 0 m 033 [ ? 2 5 l 033 [ 2 J 0000016
The ANSI escape sequences are interpreted by terminal emulators. C will convert the octal/hexadecimal escape sequences to the ASCII Esc character. Your compiler, as an extension, might also convert \e or \E. As requested, a brief explanation of what the control sequences are doing:
[0m: resets all the SGR attributes [?25l: hides the cursor [2J: from Wikipedia:
Clears part of the screen. If n is 0 (or missing), clear from cursor to end of screen. If n is 1, clear from cursor to beginning of the screen. If n is 2, clear entire screen ...
man 5 termcaporman 5 terminfoprintf()'s perspective it works like any otherprintf()statement: It prints a sequence ofchars to the Standard Output. Try redirecting the program's output to a file and then inspect it's content.\033[, for instance to print bold you'd use the SGR CSI (m) with parameter1by printing"\033[1m". The SGR parameters are here and are such fun. Wikipedia also provides examples at the bottom.