"backspace" 이스케이프 문자 "\b": 예기치 않은 동작?
그래서 드디어 K&R을 읽고 처음 몇 페이지 안에 백스페이스 탈출 캐릭터가 있다는 걸 알게 됐어요\b
.
그래서 시험해 봤는데 아주 이상한 동작이 있어요.
#include <stdio.h>
main ()
{
printf("hello worl\b\bd\n");
}
출력은
hello wodl
누가 이걸 설명할 수 있나요?
사용하시는 단말기 또는 콘솔 프로그램의 종류에 따라 결과가 달라집니다만, 대부분의 경우 그렇습니다.\b
파괴적이지 않은 백스페이스입니다.커서는 뒤로 이동하지만, 거기에 있는 것은 지워지지 않습니다.
그래서...hello worl
부품, 코드 출력
헬로월^
...(어디서)^
커서가 어디에 있는지 표시) 다음으로 2개의 커서가 출력됩니다.\b
(단말기에서) 삭제하지 않고 커서를 2자리 뒤로 이동시키는 문자:
헬로월^
커서가 현재 에 있습니다.r
그러면 출력됩니다.d
를 덮어씁니다.r
다음과 같은 이점을 얻을 수 있습니다.
안녕 wodl^
마지막으로 출력합니다.\n
이것은 비파괴형 뉴라인(또한 대부분의 단말기에서 사용하시는 단말기도 포함)이기 때문에l
변경되지 않고 커서가 다음 줄의 선두로 이동합니다.
.......... ^ <= "인쇄 헤드" 포인터
/* part1 */
printf("hello worl");
헬로월^ <= "인쇄 헤드" 포인터
/* part2 */
printf("\b");
헬로월^ <= "인쇄 헤드" 포인터
/* part3 */
printf("\b");
헬로월^ <= "인쇄 헤드" 포인터
/* part4 */
printf("d\n");
안녕 wodl ^ <= 다음 줄의 "인쇄 헤드" 포인터
파괴적인 백스페이스를 원한다면
"\b \b"
즉, 백스페이스, 스페이스 및 다른 백스페이스입니다.
각 문자 뒤에 단일 백스페이스 사용printf("hello wor\bl\bd\n");
설명하기가 어렵지 않아...이건 타이핑하는 거랑 비슷합니다.hello worl
, 왼쪽 키를 두 번 누르고,d
, 다운 키를 누릅니다.
적어도, 그게 내가 추측하는 당신의 단말기가 그 컴퓨터에\b
그리고.\n
코드를 지정합니다.
출력을 파일로 리디렉션하면 완전히 다른 정보를 얻을 수 있을 것입니다.다만, 그 차이를 확인하려면 , 파일의 바이트를 참조할 필요가 있습니다.
[편집]
좀 더 자세히 말씀드리면printf
는 일련의 바이트를 내보냅니다.hello worl^H^Hd^J
,어디에^H
ASCII 문자 #8 이며,^J
ASCII 문자 #10 입니다.화면에 표시되는 내용은 단말기가 이러한 제어 코드를 해석하는 방법에 따라 달라집니다.
언급URL : https://stackoverflow.com/questions/6792812/the-backspace-escape-character-b-unexpected-behavior
'programing' 카테고리의 다른 글
Vue Draggable - 드롭할 요소에 액세스합니다. (0) | 2022.08.10 |
---|---|
행 길이가 다른 다차원 배열 할당에 malloc 사용 (0) | 2022.08.10 |
왜 C자 리터럴은 chars가 아닌 int일까요? (0) | 2022.08.10 |
목록에서 선택한 요소를 변경하면 Vue.js가 전환됩니다. (0) | 2022.08.10 |
페이지를 바꾸면서 일시정지 없이 음악을 듣는 방법 (0) | 2022.08.10 |