C에서의 \b 및 \r 사용방법
\b
그리고.\r
실제로 사용되는 경우는 거의 없습니다.내가 이 두 탈출 시퀀스를 잘못 이해했다는 걸 방금 알았어.간단한 테스트:
printf("foo\bbar\n");
나는 그것이 출력될 것으로 기대했다.fobar
,왜냐면\b
커서의 백스페이스가 표시됩니다.b
두 번째를 덮어씁니다.o
대신 다음과 같이 출력됩니다.foobar
에 있어서도 마찬가지다.\r
:
printf("foo\rbar\n");
내 생각에는 말이지…\r
커서가 현재 행의 선두로 이동하기 때문에bar
대체하다foo
최종 출력은 다음과 같습니다.bar
다만, 실제로는 다음과 같이 출력됩니다.
foo
bar
이와 같이 문자는 기본 출력 디바이스(이 경우는 터미널 에뮬레이터)에 송신됩니다.
이러한 문자가 실제로 표시되는 방법은 단말기의 구현에 달려 있습니다.예를 들어 벨(\a
일부 단말기에서 비프음이 울리거나 다른 단말기에서 화면이 깜박이거나 완전히 무시될 수 있습니다.모두 단말기의 설정에 따라 달라집니다.
C Primer Plus에 기술된 각 문자의 의미에 대해, 당신이 예상한 것은 '정답'입니다.일부 컴퓨터 아키텍처 및 컴파일러에서는 해당되지만 유감스럽게도 고객님의 아키텍처에서는 해당되지 않습니다.
당신의 테스트를 반복하기 위해 간단한 c 프로그램을 작성했고, 그 '정답'을 얻었습니다.Mac OS와 gcc를 사용하고 있었습니다.
그리고 당신이 사용하던 컴파일러가 무엇인지 매우 궁금합니다.:)
컴파일러마다 백슬래시 이스케이프 문자의 동작이 다릅니다.
MAC OS에서는 쨍그랑 소리가 난다.\b
는 예상대로 콘솔에서 마지막 문자를 삭제합니다.
#include <iostream>
int main ()
{
std::cout << "Test";
std::cout << "\b";
std::cout << "\n";
return 0;
}
출력:
Tes
문자는 문서화된 그대로입니다.\b
문자 코드에 상당하다0x08
그리고.\r
와 동등하다0x0d
OS가 이러한 문자에 어떻게 반응하는지가 다릅니다.디스플레이가 오래된 텔레타이프를 에뮬레이트하려고 할 때, 이러한 동작은 표준화되었지만, 현대 환경에서는 유용성이 떨어지고 호환성이 보장되지 않습니다.
백스페이스 및 캐리지 리턴 문자의 해석은 표시에 사용하는 소프트웨어에 맡겨집니다.단말 에뮬레이터는 \b를 표시할 때 커서를 한 걸음 뒤로 이동하고 \r을 표시할 때 행의 선두로 이동합니다.텍스트 파일 등 다른 장소에 이러한 문자를 인쇄하면 소프트웨어가 선택할 수 있습니다.뭔가 다른 걸 하려고요.
백슬래시 이스케이프 캐릭터를 많이 실험해 봤어요. \n
새로운 라인 피드를 배치하여 효과를 얻을 수 있습니다.이 문자를 사용할 때 주의해야 할 중요한 점은 사용하고 있는 머신의 운영체제가 출력에 영향을 줄 수 있다는 것입니다.예를 들어, 다수의 이스케이프 문자를 인쇄하고, OS가 출력에 영향을 주는 것을 증명하기 위해 다음과 같이 결과를 표시했습니다.
코드:
#include <stdio.h>
int main(void){
printf("Hello World!");
printf("Goodbye \a");
printf("Hi \b");
printf("Yo\f");
printf("What? \t");
printf("pewpew");
return 0;
}
언급URL : https://stackoverflow.com/questions/17236242/usage-of-b-and-r-in-c
'programing' 카테고리의 다른 글
re.search와 re.match의 차이점은 무엇입니까? (0) | 2022.11.27 |
---|---|
표시할 java.sql 타임스탬프 포맷 방법 (0) | 2022.11.27 |
CSS는 항상 JavaScript보다 앞서야 합니까? (0) | 2022.11.27 |
해석 오류: 구문 오류, 내 PHP 코드의 예기치 않은 파일 끝 (0) | 2022.11.27 |
PDF 파일 병합 (0) | 2022.11.27 |