> 백엔드 개발 > C++ > C에서 `cout`이 부호 없는 문자를 올바르게 인쇄하지 않는 이유는 무엇입니까?

C에서 `cout`이 부호 없는 문자를 올바르게 인쇄하지 않는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-27 06:01:08
원래의
181명이 탐색했습니다.

Why Doesn't `cout` Print Unsigned Characters Correctly in C  ?

cout이 서명되지 않은 문자를 인쇄하지 못하는 문제: 문제 해결

C에서는 cout이 서명되지 않은 문자를 인쇄하지 않는 문제가 자주 발생합니다. 이를 이해하기 위해 제공된 코드 예제를 분석해 보겠습니다.

#include<iostream>
#include<stdio.h>

using namespace std;

main() {
    unsigned char a;
    a = 1;
    printf("%d", a);
    cout << a;
}
로그인 후 복사

이 코드에서 부호 없는 char 변수 a에는 값 1이 할당됩니다. printf를 사용하여 a를 인쇄하면 결과는 "1"입니다. 그러나 cout << a는 무작위로 보이는 문자를 표시합니다.

이러한 불일치의 이유는 unsigned char이 0부터 255까지의 값을 저장할 수 있기 때문입니다. a가 1인 경우 인쇄할 수 없는 ASCII 문자 'SOH'(시작 부분)에 해당합니다. 표제). printf는 cout과 다르게 인쇄할 수 없는 문자를 처리합니다.

문자가 인쇄 가능한지 확인하려면 std::isprint 함수를 사용하세요.

std::cout << std::isprint(a) << std::endl;
로그인 후 복사

이렇게 하면 "0"이 인쇄되어 다음을 나타냅니다. 'SOH'는 인쇄할 수 없습니다.

cout이 1을 인쇄하도록 강제하려면 a를 unsigned에 캐스팅합니다. 정수:

cout << static_cast<unsigned>(a) << std::endl;
로그인 후 복사

이렇게 하면 "1"이 성공적으로 인쇄됩니다.

인쇄할 수 없는 문자를 처리할 때 printf와 cout의 근본적인 차이점을 이해하는 것이 이 문제를 해결하는 데 중요합니다. 또한 std::isprint는 문자를 사람이 읽을 수 있는 형식으로 인쇄해야 하는지 여부를 결정하는 데 도움이 될 수 있습니다.

위 내용은 C에서 `cout`이 부호 없는 문자를 올바르게 인쇄하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿