programing

\t와 \b는 무엇을 합니까?

i4 2023. 6. 25. 18:23
반응형

\t와 \b는 무엇을 합니까?

이 간단한 코드 줄이

printf("foo\b\tbar\n");

"o"를 "\t"로 대체하고 다음 출력을 생성합니다.

fo     bar

(탭 중지가 8자마다 발생하는지 확인).반대로 저는 이해합니다.

foo    bar

내 셸은 \b를 "커서를 한 위치 뒤로 이동"으로 해석하고 \t를 "다음 탭 중지로 커서 이동"으로 해석하는 것 같습니다.이 동작이 내가 코드를 실행하는 셸에만 해당됩니까?시스템마다 다른 동작을 기대해야 합니까?

아니요, 그것이 그들이 해야 할 일입니다.

많은 언어들)에서 여러분은 C (은▁ctypeers▁using▁in▁hard▁charact에▁you(다),▁insert)를 사용하여 보기 어려운/유형의 문자를 삽입할 수 있습니다.\표기법:

  • \a alert(경보음)
  • \b백스페이스/브루아웃입니다.
  • \n line new line 입다니입니다.
  • \r캐리지 리턴(왼쪽 여백으로 리턴)입니다.
  • \t tabis »

또다 진을사용문자수 8값수있지을다니를 사용하여 할 수 .\0nnn 또는 문자의 16진수 값\xnn의

  • EG의 값: 다의음 ASCII 값_ 137, 137, 16진수 5f로 .\0137또는\x5f키드에이기없는경우이능보▁a가 없는 경우_열쇠 같은 것.은 NUL과▁n)과 같은 제어 문자에 더 유용합니다.\0및 ESC 및 ESC(\033)

누군가가 글을 올렸을 때(그리고 나서 내가 +1을 하기 전에 그들의 답변을 삭제했다), 덜 자주 사용되는 것들도 있습니다.

  • \f 피드 페이지)입니다.
  • \v수직 탭입니다(같은 열에서 한 줄 아래로 이동).

화에면.\f일반적으로 와 동일하게 작동합니다.\v그러나 일부 프린터/텔레타이프에서는 다음 형태/용지로 이동합니다.

백스페이스와 탭 모두 커서 위치를 이동합니다.둘 다 진정한 '인쇄 가능한' 문자는 아닙니다.

코드는 다음과 같습니다.

  1. 인쇄 "foo"
  2. 커서를 한 칸 뒤로 이동
  3. 커서를 다음 탭 중지로 이동
  4. 출력 "bar".

기대하는 는 예되는결얻다필음다니요합이면으려과상를다▁to▁you▁need니필▁you합이 필요합니다.printf("foo\b \tbar")여분의 '공간'을 기록합니다.이는 다음과 같습니다.

  1. 출력 "foo"
  2. 커서를 한 칸 뒤로 이동
  3. '를 출력합니다(두 번째 'o'를 대체합니다).
  4. 커서를 다음 탭 중지로 이동
  5. 출력 "bar".

대부분의 경우 프로그램 출력을 포맷하기 위해 탭과 백스페이스를 사용하는 것은 부적절합니다. 사용법 printf()형식 지정자입니다.탭 렌더링은 출력을 보는 방법에 따라 크게 달라질 수 있습니다.

이 작은 스크립트는 단말기의 탭 렌더링을 변경하는 한 가지 방법을 보여줍니다.Ubuntu + gnome-terminal에서 테스트됨:

#!/bin/bash
tabs -8 
echo -e "\tnormal tabstop"
for x in `seq 2 10`; do
  tabs $x
  echo -e "\ttabstop=$x"
 done

tabs -8
echo -e "\tnormal tabstop"

하십시오.man setterm그리고.regtabs.

출력을 리디렉션하거나 파일에 쓰기만 하면 탭이 일반적으로 표준 8자 미만으로 표시됩니다. 특히 "프로그래밍" 편집기 및 IDE에서는 더욱 그렇습니다.

다른 말로 하면,

printf("%-8s%s", "foo", "bar"); /* this will ALWAYS output "foo     bar" */
printf("foo\tbar"); /* who knows how this will be rendered */

IMHO, 탭은 일반적으로 어떤 것에도 적합하지 않습니다.탭으로 구분된 값 입력 파일(쉼표로 구분된 값과 유사)이 필요한 프로그램에 대한 출력을 생성하는 경우는 예외일 수 있습니다.

백이스스'\b'그건 다른 이야기야...텍스트 편집기가 가비지를 뱉어내기 때문에 텍스트 파일을 만드는 데 절대 사용해서는 안 됩니다.그러나 형식 문자열만으로는 수행할 수 없는 대화형 명령줄 프로그램을 작성하는 데 많은 응용 프로그램이 있습니다.필요한 경우 "ncurses"를 확인하면 터미널 화면에서 출력이 어디로 가는지 훨씬 더 잘 제어할 수 있습니다.그리고 일반적으로 1995년이 아닌 2011년이기 때문에 GUI는 일반적으로 매우 상호 작용적인 프로그램을 처리하기가 더 쉽습니다.하지만 다시, 예외가 있습니다.새로운 스크립트 언어를 위한 텔넷 서버나 콘솔을 작성하는 것과 같습니다.

C 표준(실제로 C99, 저는 최신 버전이 아닙니다)은 다음과 같이 말합니다.

실행 문자 집합에서 그래픽이 아닌 문자를 나타내는 알파벳 이스케이프 시퀀스는 다음과 같이 디스플레이 장치에서 작업을 생성합니다.

\b (백스페이스) 활성 위치를 현재 라인의 이전 위치로 이동합니다. [...]

\t (수평 탭) 활성 위치를 현재 라인의 다음 수평 표 위치로 이동합니다. [...]

둘 다 활성 위치를 이동하기만 하면 되며, 다른 문자 위에 문자를 쓰지 않아야 합니다.공간을 사용하여 덮어쓰려면 다음 작업을 수행합니다.puts("foo\b \tbar"); 데이지 일부 에서는 하만일디부장이치는서에레플스프휠터 - 들데지린이어예를지프 -o투명 공간이 표시됩니다.

에 의해 이은터예사터에미는뮬널이터레하용며르다따라에미널작동예(▁this:에터이뮬레▁is▁you:xterm 및. 및 단말기가 제공하는 의미론.이었고, 은 합리적으로 터널년동지 20안동었고이은, 수있다습니의의존할의 에 의존할 수 .\b.

\t탭 캐릭터이고, 당신이 기대하는 것을 정확히 하고 있습니다.\b다음 탭 중지로 이동한 다음 감소한 다음 다음 탭 중지로 이동합니다(이 경우에는 동일한 탭 중지). 이는 다음 탭 중지 때문입니다.\b.

언급URL : https://stackoverflow.com/questions/8657702/what-do-t-and-b-do

반응형