답변:
결과는 사용중인 터미널 또는 콘솔 프로그램의 종류에 따라 달라 지지만 대부분 \b은 비파괴적인 백 스페이스입니다. 커서를 뒤로 이동하지만 거기에있는 것을 지우지는 않습니다.
따라서 hello worl부품의 경우 코드는
안녕 worl
^
... ( ^커서가있는 위치를 보여줍니다) 그런 다음 지우지 않고\b 커서를 두 곳 뒤로 이동하는 두 문자를 출력 합니다 (터미널에서).
안녕 worl
^
커서는 이제 r. 그런 다음을 출력 d하여을 덮어 쓰고 다음 r을 제공합니다.
안녕 wodl
^
마지막으로, \n비파괴적인 개행 문자를 출력하므로 (다시 말하지만, 대부분의 터미널에서 사용자 이름을 포함하여) l은 변경되지 않고 커서가 다음 행의 시작 부분으로 이동합니다.
r는 d. 설명은 여전히 맞습니다.
cmd.exe및 command.com터미널이 항상 삽입되는 것은 아닙니다 (Ins 키를 사용하여 동작을 전환 할 수 있음). 내 주 * nix 컴퓨터의 Gnome Terminal이 항상 삽입하고 Ins 키를 기반으로하는 토글이 훨씬 적다는 것을 선호하지 않는 것 같다는 사실에 놀랐습니다. 전에는 몰랐습니다. 분명히 나는 타이핑을 거의 원하지 않습니다. :-)
.......... ^ <= "인쇄 헤드"에 대한 포인터
/* part1 */
printf("hello worl");
안녕 worl
^ <= "인쇄 헤드"에 대한 포인터
/* part2 */
printf("\b");
안녕 worl
^ <= "인쇄 헤드"에 대한 포인터
/* part3 */
printf("\b");
안녕 worl
^ <= "인쇄 헤드"에 대한 포인터
/* part4 */
printf("d\n");
안녕 wodl ^ <= 다음 줄의 "인쇄 헤드"에 대한 포인터
'\n'화면에 표현이 없다는 것입니다 . 이미있는 것은 동일합니다. 공백이나 다른 문자 표현으로 대체되지 않습니다.
파괴적인 백 스페이스를 원한다면 다음과 같은 것이 필요합니다.
"\b \b"
즉, 백 스페이스, 공백 및 다른 백 스페이스.
\b은 다음 출력 문자가 덮어 쓸 것임을 의미합니다.
0x7f)을 구현하지 않는 한 난처합니다.
설명하기 너무 어렵지 않습니다 hello worl. 이것은를 입력하고 , 왼쪽 화살표 키를 두 번 누르고,를 입력 d하고, 아래쪽 화살표 키를 누르는 것과 같습니다.
적어도 그것은 당신의 터미널이 \b및 \n코드를 방해하고 있다고 추론하는 방법 입니다.
출력을 파일로 리디렉션하면 완전히 다른 것을 얻을 수 있습니다. 차이를 확인하기 위해 파일의 바이트를 살펴 봐야 할 수도 있습니다.
[편집하다]
좀 더 자세히 설명하면 다음과 printf같은 일련의 바이트를 내 보냅니다. hello worl^H^Hd^J여기서는 ^HASCII 문자 # 8이고 ^JASCII 문자 # 10입니다. 화면에 표시되는 내용은 터미널이 이러한 제어 코드를 해석하는 방법에 따라 다릅니다.