"백 스페이스"이스케이프 문자 '\ b': 선택하지 않은 동작?
그래서 드디어 K & R 을 읽습니다 처음 몇 페이지에서 백 스페이스 이스케이프 문자가 무엇을 배웠습니다 \b
.
그래서 나는 그것을 테스트하기 위해 매우 이상한 행동이 있습니다.
#include <stdio.h>
main ()
{
printf("hello worl\b\bd\n");
}
출력은
hello wodl
누구든지 서열 설명 할 수 있습니까?
결과는 사용중인 터미널 또는 콘솔 프로그램의 종류에 따라 달라 지지만 대부분 \b
은 비파괴적인 백 스페이스입니다. 커서를 뒤로 이동하지만 거기에있는 것을 지우는 것이됩니다.
따라서 hello worl
부품의 경우 코드는
안녕 worl ^
... ( ^
커서가있는 위치를 보여줍니다) 그런 다음 지우지 않고\b
커서를 두 곳 뒤로 이동하는 두 문자를 출력 합니다 (터미널에서).
안녕 worl ^
커서는 이제 r
. 그런 다음을 출력 d
하여 사용하고 다음 r
을 제공합니다.
안녕 wodl ^
마지막으로, \n
비파괴적인 개행 문자를 출력하고 (다시 말하지만, 대부분의 터미널에서 사용자 이름을 포함하여) l
은 변경하지 않고 커서가 다음 행의 시작 부분으로 이동합니다.
.......... ^ <= "인쇄 헤드"에 대한 포인터
/* part1 */
printf("hello worl");
안녕 worl ^ <= "인쇄 헤드"에 대한 포인터
/* part2 */
printf("\b");
안녕 worl ^ <= "인쇄 헤드"에 대한 포인터
/* part3 */
printf("\b");
안녕 worl ^ <= "인쇄 헤드"에 대한 포인터
/* part4 */
printf("d\n");
안녕 wodl ^ <= 다음 줄의 "인쇄 헤드"에 대한 포인터
파괴적인 백 스페이스를 다음과 같은 것이 필요합니다.
"\b \b"
즉, 백 스페이스, 공백 및 다른 백 스페이스.
설명하기 너무 어렵지 않습니다 hello worl
. 여기에 입력하고 , 왼쪽 화살표 키를 두 번 클릭하고 입력 d
하고, 화살표 키를 누르는 것과 같습니다.
당신의 터미널이 \b
및 \n
코드를 방해하고 추론하는 방법 입니다.
출력을 파일로 리디렉션하면 다른 것을 얻을 수 있습니다. 차이를 확인하기 위해 파일의 바이트를 볼 수 있습니다.
[편집하다]
좀 더 자세히 설명하면 다음과 printf
같은 내용의 바이트를 보냅니다. hello worl^H^Hd^J
여기서는 ^H
ASCII 문자 # 8이고 ^J
ASCII 문자 # 10입니다. 화면에 표시되는 내용은 터미널이 다음 제어 코드를 해석하는 방법에 따라 진행됩니다.
각 문자 뒤에 단일 백 스페이스 사용 printf("hello wor\bl\bd\n");
참고 URL : https://stackoverflow.com/questions/6792812/the-backspace-escape-character-b-unexpected-behavior
'IT' 카테고리의 다른 글
PHP를 사용하여 동적으로 QR 코드 생성 (0) | 2020.09.06 |
---|---|
UITableView는 스 와이프하여 방식 수 없지만 여전히 편집 모드에서 삭제가 있습니까? (0) | 2020.09.06 |
모듈로 연산자 (%)는 C #의 다른 .NET 버전에 대해 다른 결과를 제공합니다. (0) | 2020.09.06 |
Vagrant에서 RAM을 늘리고 호스트해야 할 설정을 설정해야합니까? (0) | 2020.09.06 |
데이터베이스 테이블의 ID 열 이름 지정 (0) | 2020.09.06 |