C에서 EOF와 '\0'의 값은 무엇입니까?
나는 그것을 알고 있습니다.EOF
그리고.'\0'
정수형이지만, 그렇다면 고정된 값을 가져야 하지 않을까요?
는 둘 다 을 받았습니다.EOF
0의 합니다.'\0'
하지만 이 값들은 고정되어 있습니까?
나도 이것을 가지고 있었습니다.
int a=-1;
printf("%d",a==EOF); //printed 1
값은 다음과 같습니까?EOF
그리고.'\0'
고정 정수?
EOF
는 정수 로, 형식은 다음과 같습니다.int
그리고 구현 종속 음수 값이지만 매우 일반적으로 -1입니다.
'\0'
입니다.char
이고 C++의 값이 0인 경우int
C의 값이 0인 경우.
이유printf("%d",a==EOF);
결과적으로1
값을 할당하지 않았기 때문입니다.EOF
a
대신에 당신은 확인했습니다.a
과 EOF
그리고 그것이 사실이었기 때문에 (a == -1 == EOF
했습니다.1
.
NULL
그리고.'\0'
캐스팅으로) 한 값으로 할 수 . 두 . 0과 0 사이의 차이입니다. 그러나 두 가지는 매우 다른 두 가지를 나타냅니다.NULL
는 null(항상 잘못된) 포인터이지만'\0'
문자열 종결자입니다. EOF
대신 스트림의 끝을 나타내는 음수 정수 상수입니다. 종종 -1이지만 표준에서는 실제 값에 대해 아무 말도 하지 않습니다.
는 C&C++의 .NULL
그리고.'\0'
:
- C++로
'\0'
입니다.char
에는 C 있는동그것은안에▁while은그.int
이것은 콜 캐릭터에서 리터럴이 고려되기 때문입니다.int
s의 C++로
NULL
0인 , 에서는 C서 0으 0로 정 의 수 있 반 면 는 그 "적 " 냥 " 입 " 에 캐스팅된 될 수 .void *
은 C할 수 ). 변환에 C가 더 하기 때문입니다. 왜냐하면, 포인터 변환에서 C++가 더 엄격하기 때문입니다.void *
암시적으로 다른 포인터 유형으로 변환할 수 없습니다. 따라서, 만약NULL
.void *
할당 시 대상 포인터 유형에 캐스트해야 합니다.int * ptr = (void *) 0; /* valid C, invalid C++ */
관련 표준 인용문:
C++98/03
NULL
NULL
0으로 할 수 보장된 정수형입니다.
4.10 포인터 변환
null 포인터 상수는 0으로 평가되는 정수 유형의 정수 상수 식(5.19) r 값입니다.널 포인터 상수는 포인터 유형으로 변환될 수 있으며, 결과는 해당 유형의 널 포인터 값이며 개체 포인터 또는 함수 유형 포인터의 다른 모든 값과 구별할 수 있습니다.동일한 유형의 두 null 포인터 값은 동일하게 비교되어야 합니다.null 포인터 상수를 cv-qualified type 포인터로 변환하는 것은 단일 변환이며, 적격 변환(4.4) 이후의 포인터 변환 순서가 아닙니다.
18.1 유형
[...] 매크로 NULL은 이 국제 표준(4.10)에서 구현 정의된 C++ null 포인터 상수입니다. (가능한 정의에는 및 ,가 포함되지만 포함되지 않습니다.)
'\0'
0-값 문자가 있어야 합니다.
2.2 문자 집합
기본 실행 문자 집합과 기본 실행 와이드 문자 집합에는 각각 [...]개의 널 문자(각각 널 와이드 문자)가 포함되어야 하며, 그 표현은 모두 0비트입니다.
'\0'
입니다.char
리터럴:
2.13.2 캐릭터 리터럴
문자 리터럴은 단일 따옴표로 둘러싸인 하나 이상의 문자입니다.
'x'
L'x'에서와 같이 선택적으로 문자 L 앞에 붙습니다.L로 시작하지 않는 문자 리터럴은 좁은 문자 리터럴이라고도 하는 일반 문자 리터럴입니다.단일 c-char가 유형을 포함하는 일반 문자 리터럴char
실행 문자 집합에서 c-char 인코딩의 숫자 값과 동일한 값을 사용합니다.
이스케이프 시퀀스가 값을 지정하므로 값은 0입니다.
\ooo
은 백슬래시 다음에 원하는 문자의 값을 지정하는 데 사용되는 1, 2 또는 3개의 8진수로 구성됩니다.
'\0'
문자열 리터럴을 종료하는 데 사용됩니다.
2.13.4 스트링 리터럴
후 71), 에서후 7(2.1)에서,
'\0'
문자열을 검색하는 프로그램이 끝을 찾을 수 있도록 모든 문자열 리터럴에 추가됩니다.
EOF
의 EOF
는 C89 표준(제27.8.2조 "C 라이브러리 파일"에 명시된 바와 같이)에 위임되며, 여기서 구현 특정 음의 정수로 정의됩니다.
C99
NULL
는 0이며, 으로 null "0"으로 됩니다.void *
;NULL
는 null 포인터입니다.
6.3.2.3 포인터
[...]에 .
void *
포인터 상수라고 ( "null" 은 "null" 입니다. (으)로 표시됩니다.NULL
에 정의되어 있습니다.<stddef.h>
(및 기타 헤더)를 null 포인터 상수로 사용합니다. 7.17 참조). null 포인터 상수를 포인터 유형으로 변환하면 null 포인터라고 하는 결과 포인터가 어떤 개체나 함수에 대한 포인터와 동일하지 않게 비교됩니다.공통 7.17항
<stddef.h>
[...] 매크로는
NULL
이 값은 구현 정의 null 포인터 상수로 확장됩니다. [...]
'\0'
'\0'
값이 0인 정수이며 문자열을 종료하는 데 사용됩니다.
5.2.1 문자 집합
[...] 모든 비트가 0으로 설정된 바이트(null 문자라고 함)는 기본 실행 문자 집합에 존재해야 하며, 이 바이트는 문자열을 종료하는 데 사용됩니다.
6.4.4.4 문자 상수
정수 문자 상수는 단일 따옴표로 둘러싸인 하나 이상의 다중 바이트 문자 시퀀스입니다.
'x'
. [...]8진수 이스케이프 시퀀스에서 백슬래시 뒤에 오는 8진수는 정수 문자 상수에 대한 단일 문자 구성의 일부이거나 넓은 문자 상수에 대한 단일 와이드 문자 구성의 일부로 간주됩니다.이렇게 형성된 8진수 정수의 숫자 값은 원하는 문자 또는 넓은 문자의 값을 지정합니다. [...]
은 " " " " " 입니다.
int
.
EOF
EOF
는 구현 의 정수입니다.
7 7.19 입력
<stdio.h>
7.19.1 소개
EOF
은 유이있정상수식확으장다됩니로수는형입니다.
int
종료를 여러 값에서 더 되지 않음을 나타냅니다.
문자 0입니다. '\0'을 null로 입니다. EOF는 컴파일러에 따라 다르지만 보통 -1이고 항상 다음과 같은 값입니다.unsigned char
참을 수가 없습니다. EOF는 수 있기 때문입니다. EOF라는 존재의 가치는 바뀔 수 . 변화할 수 있기 때문입니다.항상 x == -1이 아닌 x == EOF를 선택합니다. 0입니다.'\0'은 입니다.당신은 그것을 기대할 수 있습니다.
. '\0'
의 값이 동일합니다.NULL
EOF가 일반적으로 -1인 반면, 이것은 0(그러나 다른 의미)입니다.
printf("%d",a==EOF); //printed 1
이 경우 다음과 같이 묻습니다. A는 == EOF입니까?인쇄 1(참)이면 인쇄 0(거짓)이 아닙니다.
'\0'은 항상 0입니다.
EOF는 컴파일러에 종속됩니다.
가장 일반적으로 -1(gcc & g++ 단위)입니다.
언급URL : https://stackoverflow.com/questions/4705968/what-is-value-of-eof-and-0-in-c
'programing' 카테고리의 다른 글
각도 - @입력 및 @출력 대주입식 서비스 (0) | 2023.06.14 |
---|---|
이전 인쇄물을 stdout으로 덮어쓰는 방법은 무엇입니까? (0) | 2023.06.14 |
아이폰 데이터 사용량 추적/모니터링 (0) | 2023.06.14 |
사용자가 Firebase에서 로그아웃하도록 하는 방법은 무엇입니까? (0) | 2023.06.14 |
아이폰 6 및 6 Plus에서 앱의 기본 해상도를 활성화하는 방법은 무엇입니까? (0) | 2023.06.14 |