./a.out을 사용하여 bash에서 ac/c++ 프로그램을 실행할 때마다 입력하는 동안 백스페이스를 할 수 없습니다. 대신 물음표가 있는 상자를 받았습니다.
답변1
이것물음표가 있는 상자유니코드 대체 문자처럼 들립니다. 이 경우 다음과 같이 표시될 수 있습니다.
- 터미널은 UTF-8 인코딩을 사용합니다.
- 누군가 UTF-8 인코딩을 사용하여 멀티바이트 문자를 입력했습니다.
- 백스페이스(또는 어떤 용어든) 키가 수신되지만
- 오직부분역할, 즉 마지막 역할바이트터미널 드라이버에 의해 제거되고
- (재)표시를 요청한 터미널에는 불완전한 문자가 하나만 있고,
- 대체 문자 표시:
iutf8
Linux 커널은 수년 동안 플래그를 지원했지만 이는 표준화되지 않았으며 일반적으로 다른 시스템에서는 사용할 수 없습니다(OSX에는 있습니다, 덧붙여서). 추가적으로 (지원되더라도) 꺼질 수도 있습니다.
추가 자료:
모든 POSIX 시스템 tty 드라이버가 지원합니다.“요리”일부 원시 라인 편집 기능을 사용할 수 있는 모드입니다. 문자 삭제 기능(백스페이스를 누르면 활성화됨)이 UTF-8에서 제대로 작동하려면 0x80-0xBF 범위의 연속 바이트를 문자로 계산하지 말고 UTF-8의 일부로 삭제하라는 지시가 필요합니다. 8 멀티바이트 시퀀스. 커널은 libc 로케일 메커니즘을 인식하지 못하기 때문에 UTF-8이 사용되고 있음을 tty 드라이버에 알리는 또 다른 메커니즘이 필요합니다. Linux 커널 버전 2.6 이상은
c_iflag
struct termios의 멤버 변수에서 비트 IUTF8을 지원합니다. 설정되면 "쿠킹된" 모델라인 편집기가 UTF-8 멀티바이트 시퀀스를 올바르게 처리합니다. 이 모드는 명령 셸에서 설정할 수 있습니다."stty iutf8". Xterm과 친구들은 UTF-8 로케일에서 호출될 때 자동으로 이 비트를 설정해야 합니다.
답변2
이는 예상된 동작입니다.
이 Backspace
키는 삭제용이 아닌 백스페이스용입니다.
문자를 삭제하려면 DEL
키를 사용하세요.