gnavi
그는 물었다 11년 전
285

39, & # 39 는 어떤 차이가 nulll \0&;; 및 0

C 에서, 다양한 가치가 전혀 없는 차이가 있는 것 같습니다 - 'NULL', 'NUL)' 과 '0'.

39, & # 39 0& 내가 알고 있는 ASCII 문자 '로 평가되는', '48' 또는 '0x30'.

이 'NULL' 포인터입니다 보통 다음과 같이 정의된다.

#define NULL 0

또는

#define NULL (void *)0

또한 ',' 문자 '& # 39 NUL 문제가 있는 것 같다', '0' 평가하십시오 \0& # 39 로 잘 알려져 있다.

이 세 가지 값이 같을 수 없는 경우가 있습니까?

또한 진정한 로만스였나 64 비트 시스템에서?

Keith Thompson
그는 7년 전 댓글을 달았습니다
7

C 표준 라이브러리 언어 또는 식별자입니다 NUL '가 없습니다.' (또는 C++ 언어로 내린 것으로 알고). 널 문자 종종 있지만, 일반적으로 C 나 C++ it& NUL 불렀으매 # 39, & # 39, '그냥' s \0& # 39 로 불린다.

답변 11 개

  • 이 질문에 대한 qic Note:* 아닌 C 언어 C++.

널 포인터를

'0' 는 정수 상수입니다 ipv6-literal. 따라 다른 의미를 컨텍스트입니다 it& # 39 에 사용됩니다. 모든 경우에, 그것은 여전히 '0') 와 정수 값을, 여러 가지 방법으로 설명됨 뿐입니다.

이 경우 포인터가 비교되는 '0' 는 상수 ipv6-literal. 관심용 가 null 포인터입니다 포인터입니다 있는지 확인합니다. 그런 다음 '0' 으로 불리는 이 null 포인터입니다 상수입니다. C 표준에 정의되어 있는 유형 (type) '및' 인 동시에 '0' 캐스트 void * null 포인터를 null 포인터입니다 상수입니다.

또한, 매크로를 돕기 위해 'NULL' 가독성 '스타디f.흐 헤더 파일' 에서 확인할 수 있습니다. # 우네프 nulll '와' 컴파일러와의 따라 재정의하거나 迈向 뭔가 엉뚱한 수도 있습니다.

따라서 올바른 방법이 몇 가지 확인할지 null 포인터입니다:

if (pointer == NULL)

'NULL' 는 비교해서 같을 수 있도록 정의된 null 포인터입니다. 실제로 어떤 정의 ',' 는 것은 구축상의 정의된 NULL null 포인터를 deltamove 컴포지션이 유효함 상수입니다.

if (pointer == 0)

또 다른 표현 '0' 널 포인터를 상수입니다.

if (!pointer)

이 경우, 따라서 ',' 기술서임을 암시적으로 검사 &quot 0&quot &quot 짓궂군요 것이 아닙니다.) 는 역동기화 0".

다음은 잘못된 방법으로 null 포인터입니다 확인할 수 있습니다.

int mynull = 0;
<some code>
if (pointer == mynull)

널 포인터 컴파일러 수 있지만, 이 두 개의 변수 검사를 확인할지 한 것은 아닙니다. 이 경우 권능은하나님께 미누얼 코드 및 컴파일러 최적화 작업 변화를 상수입니다 투자상담을 받은 적이 있지만, 이 보장되지 않을 경우 0 꽂으십시오 기술서임을 및 컴파일러 (경고 또는 오류) 는 하나 이상의 진단 메시지를 생산할 수 있는 C 표준에 따르면.

참고로 지정하십시오. null 포인터입니다 있는 C 언어. 중요하지 않은 대한 기본 아키텍처입니다. 기본 구조는 으로 정의된 null 포인터 값을 주소 0xDEADBEEF 경우, 해당 제품은 최대 컴파일러는 이 정렬하려면 엉망하지 초과됩니다.

예를 들어, 다음과 같은 방법으로 이 재미있는 아키텍처입니다 대해서도 여전히 유효한 방법으로 null 포인터입니다 확인할 수 있습니다.

if (!pointer)
if (pointer == NULL)
if (pointer == 0)

다음은 잘못된 방법으로 null 포인터입니다 확인할 수 있습니다.

#define MYNULL (void *) 0xDEADBEEF
if (pointer == MYNULL)
if (pointer == 0xDEADBEEF)

이처럼 컴파일러와의 주시노라 의해 정상적으로 볼 수 있다

Null 문자를

39, & # 39 로 정의되는 \0& ',' 은 null 문자를 사용하는 모든 문자를 즉 비트가 설정되었습니다 '제로' 로. 이 포인터 아무런 관련이 없다. 그러나 이 코드를 비슷한 상황이 나타날 수 있습니다.

if (!*string_pointer)

null 문자를 구체화하십시오 포인터가 가리키고 있는지 확인합니다

if (*string_pointer)

구체화하십시오 포인터가 가리키고 있는지 확인합니다 한 null 이 아닌 문자

39, 널 포인터를 혼동하는 don& 얻을 수 없다. 표현이 좀 해서, 이 같은 일부 허용하는 크로스 오버 편리한 경우가 별로 마찬가지입니다.

39, & # 39 는 또한 ',' \0& (다른 모든 문자 리터럴), 이 경우는 상수입니다 정수 값이 인 제로. # 39, & # 39 \0& 그러하매 ',' 완전히 '0' 에 해당하는 유일한 차이는 꾸밈 정수 상수입니다 - 사람 판독기에서 담겨 있다는 의도 (# 39 m, 이를 빌미로 nulll character.&quot I& ";).

참조입니다

[질문 중 5.3ms comp.랑이스 FAQ] 참조 (http://c-faq.com/null/ptrtest.html) 를 보다. 지켜보리니 [이 pdf] (http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf) 를 C 표준. 체크아웃하려고 단면에는 6.3.2.3 포인터, 단락 3.

Zitrax
Sinan Ünür
그는 11년 전 댓글을 달았습니다
3

Faq 목록을 가리키는 주셔서 감사합니다. 그러나 참조 http://c-faq.com/null/nullor0.html

Andrew Keeton
그는 11년 전 댓글을 달았습니다
0

좋은 점, 신안. 그것은 결코 수행됨 다는일은 것처럼 어리석은 사용 으로 뭔가를 'NULL' 핵심 요소로 값을 제로.

Johannes Schaub - litb
그는 11년 전 댓글을 달았습니다
0

아니, 이 코드는 올바르지 않은 보여줄 수 있습니다. "만약 (ptr = zero). '변환하기에 못합니다. 변경하십시오 경우 'if (= & # 39 \0& # 39 ptr;;) 그 다음 3 개의 문이 있고 항상 확인할지 avamer. '경우 null 포인터입니다.

Andrew Keeton
그는 11년 전 댓글을 달았습니다
0

이 코드는 전달자로써 @litb 첫째, 앞으로 여러 개의경고 (또는 오류 발생 가능한) 에 암시적입니다 변환에는. 둘째, & # 39 재장착하여 경우에도 '제로' 을 (를) ',', '비교' 를 all-bits-zero ptr \0& # 39 것입니다. 첫 번째 사례 '로 끝날 경우, 이는 뒤에을 변환에는 0xDEADBEEF = 0x00000000' '거짓'.

Johannes Schaub - litb
그는 11년 전 댓글을 달았습니다
4

T , ptr '를' # 39 아니요인 won& 비교하십시오 모든 비트를 제로. 하지만 이건 아니다 ',' 메맥mp 사용하여 비교 내장 연산자. # 39, & # 39 한 면은 null 포인터입니다 상수입니다 \0& ',', 그리고 the other side 는 포인터입니다. 마찬가지로 다른 두 가지 버전으로 아스웰 'NULL' 및 '0'. 이들 3 똑같이 전지전능하심이라

Johannes Schaub - litb
그는 11년 전 댓글을 달았습니다
6

내장 비교 연산자 비호환성의 심아이엔큐 비트 문장열 비교하십시오 아니하였으매 취하고 있습니다. 그러나 that& # 39 의 것이 아닌 것입니다. It 는 두 개의 값, 즉 추상적 개념. 그래서 '여전히' 0xDEADBEEF null 포인터를 null 포인터입니다 내부적으로 있는 표현되는 것 같은데, 아무리 생각해도 그 비츠트링 여전히 'NULL', '0', '비교' 와 같은 다른 모든 \0 널 포인터 상수를 말한다.

Andrew Keeton
그는 11년 전 댓글을 달았습니다
1

좋은 점을 연산자입니다 대한 비교 할 수 있습니다. 내가 브러시드 up on C99. 썻냐면 &quot, 정수 값을 0, 또는 이러한 표현식에서는 캐스트 입력할 수 있는 상수입니다 표현식에서는 void * null 포인터입니다 constant.&quot) 이다. 또한 문자 ipv6-literal. 있다고 은 정수 상수입니다 표현식입니다. 따라서 & # 39, re right that 's 속성에 의해 you& ptr = # 39, \0& # 39,'.

Pod
그는 11년 전 댓글을 달았습니다
0

이 질문에 잘못되었습니다. C 표준 널 포인터 값을 0 으로 설정합니다. 기본 시스템, 있다 하더라도 null 포인터를 사용하는 표준 doesn& 0xDEADBEEF # 39, t change. # 39 의 최대 컴파일러는 이 아웃해야 it& 정렬하려면 (앤 굿 럭 it).

"만약 '0' 과 '항상 포인터입니다 없는 경우 (! 포인터입니다) 는 항상 올바른 방법으로 null 포인터입니다 확인할지 c 에서 정의된 표준. # 39 의 조언을 따라 A. Keeton& 경우 실패할 수 있는 시스템에 0xDEADBEEF 은 널 포인터 (포인터입니다!)

David Rodríguez - dribeas
그는 11년 전 댓글을 달았습니다
0

실제로는 다른 문제: 연관해제된 유형은 비해 않을 수 없었다. 즉, 한, 두 명은 다니엘을 비교할 때 단순화표현 포인터입니다 챨 정수 변환할 수 있다. 두 경우 모두 끝나는 변환 동일한 정수 값: 0.

Andrew Keeton
그는 11년 전 댓글을 달았습니다
0

@Pod ptr '항상'! 'true' 예제에서와 상관 없이 표현한 nulll 포인터입니다. '!' 가 'ptr = 0' 을 ptr 것으로 is ptr 널 포인터를?

David Rodríguez - dribeas
그는 11년 전 댓글을 달았습니다
0

단순히 강조하십시오: 답은 잘못을 것이다. 이 세 가지 avamer 일반 0 을 향해 움직이는 최신 트렌드를 널 매크로.

Andrew Keeton
그는 11년 전 댓글을 달았습니다
0

또한, "만약" 만약 포인터입니다 'is @pod (포인터입니다!)' 는 '0'

Johannes Schaub - litb
그는 11년 전 댓글을 달았습니다
1

널 포인터 값을 잘 0x0 '주소' 다를 수 있습니다. '잘' 0xDEADBEEF 될 수 있습니다. 하지만 여전히 같은 비교한 null 포인터입니다 상수입니다. 이는 'true' 와 '거짓' 와 같은 그들의 표현을 보관할 때. 이제 '거짓' 비교 '0' 에 해당하는 해서 저장됩니까 않했느뇨 doesn& # 39 에 저장, '거짓' t 짓궂군요 바이너리인 부울입니다 모든 비트를 제로 표현됩니다. 이 경우, 정보기술 (it) 을 의미하는 괜찼습니다 높여줍니까 부울입니다 seabreeze 모든 비트를 한 불평등한 비교하여 'false' 로. 이 시맨틱스를 그대로 유지됩니다.

Andrew Keeton
그는 11년 전 댓글을 달았습니다
0

그래, 내 @all I& # 39 m, 엔써커뮤니티 wiki 있다. 공연 잘하세요:) (I was at my 담당자용 제한값 어쨋든)

Pod
그는 11년 전 댓글을 달았습니다
0

@Andrew 케이턴

39, re you& 오른쪽! 내 말은 &quot 포인터가 0&quot 경우, 만약 (! 포인터입니다) 은 항상 의미합니다.

David Rodríguez - dribeas
그는 11년 전 댓글을 달았습니다
1

Back to basics: 환론에서, 평등 과정이든 101 은 추이적: (a = b) 와 (b = c) 을 감안할 때 반드시 (a = c). 101 에 있는 콤프스키 좀처럼 해결될 기미를 보이지 않습니다. # 39, & # 39 점을 감안할 때 mynull&. 정수 (0 과 같은 가변적입니다 ipv6-literal. nulll 비유하 반드시 & # 39 (포인터입니다 및 정수 ipv6-literal.) 을 0 으로 mynull& # 39;; null 로 같아야 합니다.

Pod
그는 11년 전 댓글을 달았습니다
0

39 의 경우, 이는 결코 진정한 that& 미누얼 변경, t # 39 이 wouldn& 기대해 본다. 아무도 그런 식으로 높여줍니까 btu 있기를 바랍니다:) 파라그래프 읽습니다.

컴파일러와의 &quot 수 있지만, 이 두 개의 변수 검사를 확인할지 null 포인터입니다 있는 것은 아닙니다. 이 경우 일할 미누얼 변화를 코드 및 투자상담을 받은 적이 있지만, 이 보장되지 않을 경우 0 꽂으십시오 기술서임을 상수입니다 컴파일러 최적화 컴파일러 및 하나 이상의 진단 메시지를 생산할 수 있다 (경고 또는 오류) 에 따라 캜 Standard.&quot.

39, ie 나 되는 t 은행 it 에 대한 would& nulll 상수입니다.

Pod
그는 11년 전 댓글을 달았습니다
0

와우, I made a lot of 입력 오류 발표했다. # 39; d 리크 비난을 받을 때는 내가 전송되었기 1.30am i& 사실이 있다고 썼다.

Eugene Yokota
그는 11년 전 댓글을 달았습니다
0

C++에서, 문자 리터럴은 int 구현됩니다 챨 없습니다.

Johannes Schaub - litb
그는 11년 전 댓글을 달았습니다
0

현재 유일하게 이 질문에 대한 부품 또는 sum up the C++, c 는 같은 경우 쓸 수 있어 c++컴파일러는 변경분 어졌다면 가서 물건을 # 39 의 it& CW:)

n611x007
그는 7년 전 댓글을 달았습니다
0

39, & # 39 에서 references&;. # 39, & # 39, 그러니까 더 reading& 맞죠? ) C++컴파일러는 아니라 참조 데이터 형식, 그치?

HelloGoodbye
그는 7년 전 댓글을 달았습니다
1

39, 널 포인터를 null 포인터입니다 you& 이후 re 거론하며, 이게 뭐지? 하지만 분명한 대답을 통해 않은 만큼 해답이야 상반기 중심 설명해야 할 것이다.

oggiemc
그는 6년 전 댓글을 달았습니다
2

우네프 을 nulll 및 재정의하거나 迈向 뭔가 엉뚱한 &quot, .it 수도 있습니다. 이렇게 하면 누구나 shot.&quot 할 만하다. 이 나를 보면서 내 优秀 모라고여 했더라고요.

George
그는 5년 전 댓글을 달았습니다
0

아주 좋은 답변, 감사합니다! )

Ungeheuer
그는 3년 전 댓글을 달았습니다
0

따라서 이 공정하게 할 때, 다른 조건을 표시되는 모든 변수를 드롭될 if 문 에 비해 값이 0 이 아니라면 가변입니다 기본?

여러 사람이 어떤 차이가 있는 것으로 보인다. # 39, & # 39 착각해서는 nulll \0&. 및 0 있다. 이에 앞서 것을 설명할 수 있고, 반복하지 않으려면 할 것 "이라고 말했다.

Int 유형의 일정한 값을 0, 또는 표현식에서는 표현식에서는 함께 이 유형의 void 유형 (type) 으로, 캐스트 (cast) 은 널 포인터 상수를 변환할 경우 null 포인터를 포인터가 있는 a . 이는 모든 오브젝트에 의해 보장되는 표준 또는 함수 포인터를 불평등한 비교하십시오 *.

, 는 매크로 NULL 로 정의된 &lt stddef.h&gt. 널 포인터 상수를 비호환성의 .

39 \0& & # 39 는 건설, , , null 문자를 나타내는 데 사용되는 행하였 종료시킵니다 문자열으로.

A 은 null 문자를 디스크입니다. diskid 바이트입니다 모든 비트를 0 으로 설정되어 있습니다.

David Rodríguez - dribeas
그는 11년 전 댓글을 달았습니다
7

39, & # 39 경우에도 +1, 정확히 \0&. 팔진법 의해 정의된 문자 () 는 표현은 아닙니다. # 39, & # 39, & # 39, 표준 eventtest \N& \NN& # 39;; # 39, & # 39 와 \NNN&. nn 및 NNN 에서 N 문자 리터럴을 표현하는 것으로, 옥탈칩을.

John P
그는 3년 전 댓글을 달았습니다
0

39 는 I& guez-dribeas @davidrodr& 237, hung up 의 경우, m 확신하지 못하고 있지만 그 사람이 정말로 잘 표기법을 비워집니다 it up for me. 그냥 확실히 &quot 의해 representing"; do you mean &quot 정의된 by"; 같이 이전 마디였나?

3 개 모두 제꿈의 정의하십시오 전혀 다른 컨텍스트입니다.

  • 0 - NULL 포인터 값에 대한 고말은 포인터입니다 컨텍스트로 사용되며, 32bit 나 64bit 는 독립적으로 모두인지 (1 건 4 바이트입니다 다른 clarix 8 바이트 제로는).
    • hex 값을 나타내는 숫자는 zero 는 문자 구체화하십시오 컨텍스트로 0x30 hex 값을 갖고 있는 반면, NUL 문자 0x00 (데사용됩니다 종료 문장열).

이 세 때 항상 쳐다보거라 다른 메모리:

NULL - 0x00000000 or 0x00000000'00000000 (32 vs 64 bit)
NUL - 0x00 or 0x0000 (ascii vs 2byte unicode)
'0' - 0x20

이는 정보기술 (it) 이 좋겠다.

caf
그는 11년 전 댓글을 달았습니다
7

나스코: 스이제로프 (# 39, & # 39, \0&) '와' 평가하십시오 당황했나봐요 수

David Rodríguez - dribeas
그는 11년 전 댓글을 달았습니다
2

@Nasko: 난 정말 놀랐다. gcc 와, C 에서: 스이제로프 (& # 39, \0& # 39;) = 스이제로프 (& # 39, a& # 39;) 한편, g++, c++에서 함께 = 4: 스이제로프 (& # 39, \0& # 39;) = 스이제로프 (& # 39, a& # 39;) = 1

David Rodríguez - dribeas
그는 11년 전 댓글을 달았습니다
1

@Nasko: C 에서 표준 (초안, n1124): # 39, & # 39, & # 39, 따라서 문자 상수입니다 유형이 정수 int& \0& # 39. 실제로 C 에서, int 유형의 스이제로프 (& # 39, \0& # 39;) 및 카타시안 내 아키텍처입니다 (linux, 32bit) 는 4

Nasko
그는 11년 전 댓글을 달았습니다
0

i wasn& @dribeas 이를 설명하는 것이 아니라, 어떤 상수 t # 39 의 일부로 볼 때와 구체화하십시오. 난 절대로 할 수 있는 그것으로이라엘 명시성. 감사합니다

davidA
그는 4년 전 댓글을 달았습니다
1

'0' 은 ASCII 문자 코드 0x20 아닌 소수 0x30 (48).

chux - Reinstate Monica
그는 3년 전 댓글을 달았습니다
0

237, & # 39, 취소 한 @davidrodr& guez-dribeas &quot 편집하십시오 교정됨 0& # 39;; ASCII 값으로 0x20 (32일 12월) &quot.

Antti Haapala
그는 2년 전 댓글을 달았습니다
0

모든 제로는 널 포인터 필요는 없습니다.

[만약 NULL 포인터를 null 로 avamer 및 0 이 되는 상수입니다 사용해야 하나?] (http://c-faq.com/null/nullor0.html) 주소를 C 에 FAQ 목록을 이 문제를 잘 알려져 있다.

&gt. C 프로그래머가 있다는 점을 알아야 한다. &gt. 서로 바꿀 수 있는 'NULL' 및 '0' &gt. 포인터입니다 컨텍스트로 우 카스트 있는, 그리고 '0' &gt. 완벽하게 사용할 수 있다. 모든 활용 &gt. NULL 대신 '0') 를 제공해야 합니다 &gt. 주는 것으로 보는 것이 &gt. 포인터입니다 도전이다. 프로그래머 &gt. (모두에 대해 종속되어 안 됩니다. &gt. 자신의 이해 또는 &gt. # 39 의 compiler&) 을 구별하는 포인터입니다 &gt. # 39 의 정수 '에서' 0'& 0'& # 39 의. &gt. &gt. 이는 단지) 에 있는 포인터입니다 컨텍스트로 &gt. 'NULL' 및 '0' 동일합니다. 'NULL' 한다. &gt. '0' 은 또 다른 종류의 때 사용할 수 없습니다. &gt. 필요한 것은 아무리 작동할 수 있습니다, &gt. 때문에 잘못된 언로드하기 sends &gt. 스타일 메시지. (또, ANSI &gt. 'NULL' 정의 할 수 있습니다. &gt. 직장에서 않는 ',' ((void *) 0) &gt. 이 모든 것이 비사양 포인터입니다 컨텍스트로.) 에서 &gt. 특히 'NULL' 사용하지 않을 때 &gt. Nulll ascii 문자 ('NUL') 가 필요한. &gt. 자체적인 정의

#define NUL '\0'

&gt. 만약 합니다.

&gt. '0' 과 \0 nulll 차이가 뭘까

널 문자 (NUL) &quot "; 쉬운 배제하기 위해. # 39, & # 39 \0& ',' 는 문자 ipv6-literal. C 에서, 'it' s # 39, int 구현되고 있으니 it& 동일합니까 0 인데, 이는 '는' INT_TYPE_SIZE. C++에서, 문자가 구현되고 있는 1 ',' 챨 ipv6-literal. 바이트입니다. 일반적으로 'NULL' 또는 '0' 이 다르다.

다음으로 'NULL' 는 포인터 값을 변수 지정하는 주소 공간은 가리키십시오 않습니다. 일반적으로 후순위로 구현되어 있다는 점을 제로, 전체 주소 공간 (아키텍처입니다 표현할 수 있어야 합니다. 따라서 32 비트 및 64 비트 아키텍처 (것) 는 4 바이트 nulll 아키텍처입니다 대한 8 바이트. 이는 최대 구현은 c 이다.

마지막으로, int ', 크기' 유형 '는' 0 'ipv6-literal. 원하는거요 INT_TYPE_SIZE'. 기본값입니다 INT_TYPE_SIZE 따라 다를 수 있다 '' 의 아키텍처입니다.

애플 다음과 같이 썼다. &gt. Mac OS X 는 64 비트 데이터 모델을 사용하는 알려진 LP64&quot ";). 이것은 일반적인 데이터 모델을 이용하여 다른 64 비트용 유닉스 시스템에서 선 · SGI 물론 64 비트 리눅스. 이 데이터 모델을 다시 LP64 eventtest 추상형데이터타입 다음과 같습니다. &gt. &gt. - 32 비트 정수 있다. &gt. - 64-비트 걷고 있다. &gt. - 긴 걷고 역시 64-비트 &gt. - 포인터 64-비트 있다.

위키백과 64-비트: &gt. # 39 의 microsoft& VC++ 컴파일러와의 soundmixer. LLP64 모델을.

64-bit data models
Data model short int long  long long pointers Sample operating systems
LLP64      16    32  32    64        64       Microsoft Win64 (X64/IA64)
LP64       16    32  64    64        64       Most Unix and Unix-like systems (Solaris, Linux, etc.)
ILP64      16    64  64    64        64       HAL
SILP64     64    64  64    64        64       ?

  • 편집할지 *: 자세한 내용을 문자 ipv6-literal. 덧붙였다.

#include <stdio.h>

int main(void) {
    printf("%d", sizeof('\0'));
    return 0;
}

위의 코드는 4 번 되돌려줍니다 mgcc 과 1 의 g++.

Eugene Yokota
caf
그는 11년 전 댓글을 달았습니다
2

아니, '& # 39 는 아니다' 는 , # 39, \0& 1 바이트 값입니다. # 39 의 it& 문자 ipv6-literal. 정수인 상수입니다 표현식에서는 수 있는 경우, 그러니까 it& # 39 의 크기는 크기 그리고 있는 것으로, '한' int (디스크입니다. diskid 이상이어야 하고 2 바이트). # 39 don& 경우, t 당신한텐 스이제로프 (& # 39, \0& # 39;) '와', 평가하십시오 한번 보세요. # 39, & # 39 \0& ',', '0' 와 '0x0' 이 모두 완전히 같습니다.

Eugene Yokota
그는 11년 전 댓글을 달았습니다
0

@caf :에서 따라 다릅니다. # 39 당신한텐 don& 경우, t, 스이제로프 (& # 39, \0& # 39;) '에서' 시도하시겠습니까 c++컴파일러.

Unused
그는 5년 전 댓글을 달았습니다
2

콩지름에 &quot %zu"; 스이제로프 (무언가) 인쇄할 때

한 때 나를 수 있는 좋은 블렌드합니다 C 로 시작하는 (Linden) 에서 가져옴 숙련가 C 프로그래밍)

39, & # 39 한 l&. # 39, & # 39 와 2 개의 nul l&. null

옛날에는 이 작은 압운 재호출하려면 대한 포인터 및 올바른 용어를 ASCII 제로:

The one "l" NUL ends an ASCII string,

The two "l" NULL points to no thing.

Apologies to Ogden Nash, but the three "l" nulll means check your spelling. 

Ascii 문자를 함께 비트 패턴을 &quot NUL&quot 전혀 없는 한,) 라고 불리게 된다. 포인터 값을 특수 즉,) 는 null&quot &quot 포인터입니다 방향점 보이지 않았다. 교환할 수 있는 두 조건은 없다 대표적인 것은 다음과 같다.

dlmeetei
glglgl
그는 6년 전 댓글을 달았습니다
0

훨씬 더 단순한: 'NUL' 은 '벨', '같은 제어 코드', '술고래' 있다 ',' httechnology 코어/vt 등이 카타시안 막스야 3 자).

A 한 l nul 얻게된다면 motor1.1end 문자열으로.

두 개의 l nulll 한 점 없는 일이다.

및 내아기마저도 bet 황금 황소

3 l 없다는 누얼리.

https://stackoverflow.com/questions/220423/how-do-you-deal-with-nul

&quot NUL"; nul) 은 ascii 문자 0 이지만 않습니다. # 39 의 적어도 that& 어떻게 I& # 39, ve seen 사용했다. 0 으로 정의된 널 포인터를 종종 있으나, 이러한 환경에 따라 다릅니다 실행 중인 모든 언어를 사용하고 있으며, 운영 체제 또는 사양명세.

Ansi C 의 정수 값이 0, 널 포인터를 지정되어 있다. 그래서 여기서 s not true, ANSI C # 39 세계 모든 that& 호환일 아니다.

즉, ASCII 의 값을 갖는 바이트입니다 0x10 한 표, 특수 문자 호출됨 &quot NUL"; 또는 &quot NULL";). C 에서, 이후 shouldn& 있습니다 t 포함, 이는 소스 코드에서 # 39, 제어 문자를 표현할 수 있는, 즉, 0, C 에서 문장열 이스케이프된 &quot \0".

하지만 진정한 NULL 이 아닌 값을 . 이 값을) 는 다음과 같은 뜻이 있다. 그동안 우리가 대한 포인터의 포인터를 무슨뜻이냐믄 가리키십시오. 데이터베이스의 무슨뜻이냐믄 필드에 값이 없습니다 (없는 똑같은 말을 인용해 이 비워둡니다, 0 또는 접수됨 공백을).

    • 값을 나타내는 데 사용하는 파일 형식이 주어진 시스템이나 데이터베이스에 대한 실제 nulll isn& t # 39, 반드시 0x00.

아키텍처입니다 종속적입니다 정확한 값은 0 이 될 수 있다 'null' 보장할 수 없습니다. 대부분의 주요 아케텍처에 정의하십시오 迈向 '0' (void *).

39, & # 39 \0& ',' 는 항상 0, 0 이기 때문에 비유하 어떻게 인코딩되어 바이트입니다 문자 ipv6-literal.

내가 사용하는 데 필요한 것인지, C # 39 는 ASCII - t 너희에게베풀어진 don& 컴파일러에도 그렇지 않을 경우 # 39, & # 39 ',' 항상 48tb 비유하 0& 않을 수 있습니다. # 39 의 it& you& # 39, ll 판매업체에서 발생할 가능성은 없이 사용하는 등 EBCDIC 시스템 대체 글자셋 you& # 39, re working on 훼손하지 않는 한 매우 시스템.

크기에 따라 다를 수 있지만, 64 비트 시스템에서 각종 정수 값을 같아집니다.

-

0 으로 같을 수 없는 것이 아니냐는 의구심을 표명하고 있으나 일부 댓글 nulll zero. 프로그램, 시스템 등 걱정했던것 출력입니다 함께 예를 들어보겠습니다.

#include <stdio.h>

int main () {
    size_t ii;
    int *ptr = NULL;
    unsigned long *null_value = (unsigned long *)&ptr;
    if (NULL == 0) {
        printf ("NULL == 0\n"); }
    printf ("NULL = 0x");
    for (ii = 0; ii < sizeof (ptr); ii++) {
        printf ("%02X", null_value[ii]); }
    printf ("\n");
    return 0;
}

해당 프로그램 인쇄할 수 있습니다.

NULL == 0
NULL = 0x00000001

John Millikin
Chris Lutz
그는 11년 전 댓글을 달았습니다
2

39, & # 39 는 정보를 묻는 \0& op. # 39, & # 39 0& (NUL 을 문자), 없습니다. (이 캐릭터)

그러나, 무명, &quot systems&quot 될 것으로 보인다. 그 계좌를 관리할 수 있습니다.

John Millikin
그는 11년 전 댓글을 달았습니다
2

@Chris: # 39, & # 39 \0&. is not NULL 바이트 문자 0 에 있는 것은 인코딩되지 옥탈칩을 ipv6-literal.

David Rodríguez - dribeas
그는 11년 전 댓글을 달았습니다
2

C++에서, 정수 값이 항상 0 을 (를) 의 표준 변환을 보장합니다 포인터입니다 매수가 nulll 포인터입니다. C++에서, 0 은 null 포인터를 NULL 은 보장받을 수 있고, 반면 다른 뭔가를 재정의하거나 매크로 및 악의적인 기반 부호화 할 수 있다.

jalf
그는 11년 전 댓글을 달았습니다
6

0 과 nulll 보장받을 수 있다. 비트 패턴을 NULL NULL 포인터입니다 보장되지 않을 수 있지만, 그리고 모든 제로, 상수 () 는 항상 0).

John Millikin
그는 11년 전 댓글을 달았습니다
1

@dribeas, @jalf: 0 은 보장받을 수 없는 널 포인터를 NULL # 39 의 it& 보장할 수 있는 비교하십시오 비유하 , 포인터입니다. 만일 이 0 인 정수 원하는거요 모두 0 nulll 는 임의의 비트 패턴을 모두 0 0 이외의 수 없습니다.

jalf
그는 11년 전 댓글을 달았습니다
1

@John: Null 은 다음과 같이 정의 내린 것으로 알고 있어야 합니다 상수입니다 표현식에서는 0. 내용을 실제 null 포인터입니다 필요하지 않은 모든 제로 비트임을 수 있다. 하지만, 단지 널 포인터를 NULL, 상수 또는 다른 이름을 사용하여 비교하십시오 할당할지 정수 상수입니다 0.

당신의 첫 문장은 잘못된 nulll 정의될 수 없습니다 - (void ) 에서 0 에 c++컴파일러는 void 변환 암시적입니다 없기 때문에 다른 포인터 (달리 C).

jalf
그는 11년 전 댓글을 달았습니다
0

즉, 0 , NULL 포인터를 null 포인터 할당 또는 맞추기바인딩 tcpg 디스크입니다. diskid 오버클로킹된 구현 정의된 표현. 그러나 0 과 nulll 정의됩니까 스크램블된 동일해집니다.

John Millikin
그는 11년 전 댓글을 달았습니다
1

@Neil: c. @jalf 질문에 관한 것으로 보인다. 아니, 0 과 nulll 비유하 nulll 필요하지 않지만, 0 이 될 수 있다. 그 후 검사 포인터를 NULL 을 할당할지 디버거 그 가치를 알아볼 수 있다. 일부 아케텍처에 비제 될 수 없다.

정말 이 논의가 있을 것으로 믿고, t # 39 can& 어려움을 겪고 있다. 널 포인터를 속성을 잘 설명된 다양한 언어 표준에 꽤 있다.

John Millikin
그는 11년 전 댓글을 달았습니다
1

@Neil: 그런데 이 대답이 다운되어도 했으며, 일부 사람들이 투표한 겁니다. 확실히 차이가 있기 때문에, t # 39 can& 잡고 평등과 값입니다.

@John 투표를 한 것 때문에 그들이 어떤 횡격막탈장의 잘못됐지.

John Millikin
그는 11년 전 댓글을 달았습니다
1

@Neil: 이 방법이 잘못되었다는? C 에서, nulll 0x00000000 보장받을 수 없습니다. 임의의 비트 패턴을 걸릴 수 있다. 0 으로 비교하는 것이 유일한 작성하더라도 비유하 포인터입니다 주시노라 또 '0' 으로 정의된 NULL 은 일반적으로 기호 (void *).

John Millikin
그는 11년 전 댓글을 달았습니다
0

만약 제가 현재 탑 투표 후 표시됨과 잘못된 것 또한 잘못된 그 답을 찾을 수 있습니다.

저의 이전 글을 읽어 보시기 바랍니다. 이게 내 마지막 기여를 이 어떨까.

Johannes Schaub - litb
그는 11년 전 댓글을 달았습니다
0

39 라고 @john &quot it& 보장받을 수 없는 경우, '의', '수' (void ) 0x00000 &quot 0x000000 잘 수 있습니다. 그런 경우, C. 만일 너희가 옳은 이야기 ',' s not # 39 라고 &quot it& 0x0000 &quot 0xDEADBEEF ',' 잘 될 수 있어 보장받을 수 그런 다음, 다른 사람이 이미 잘못된 것으로 단지 유혈 말했지. 너희는너희가 &quot proved"; 그냥 코드에서 변환할 수 있는 'NULL' '주소' 0xDEADBEEF 포인터입니다 유형 * 오류가 발생할 수 있습니다. # 39, 내가 왜 널 포인터를 's talk about that& 거부하는'. # 39 의 그냥 that& 완전히 복잡한 용어. 지금 그 말 '널 포인터'.

John Millikin
그는 11년 전 댓글을 달았습니다
0

@litb: NULL 은 상수 값을. 일부 값을 가질 수 있으며, 분명히, 이 값이 0 이 될 수 없는 경우도 있습니다. # 39 m, 나와 너 사이에 있는 이유에 대해 i& 차별화합니다 &quot 포인터입니다 nulll 대입된 it"; 그리고 &quot nulll pointer"; - t null 포인터를 NULL 값을 포함하는 isn& # 39, 포인터 변수?

Johannes Schaub - litb
그는 11년 전 댓글을 달았습니다
0

내가 don& # 39, t 차별화합니다. Null NULL 포인터를 할당되어 있는 것이 아닙니다. &quot isn& 포인터 변수 값을 # 39, t, null 포인터를 포함하는 NULL&quot. 절대로 그렇지 않다. 널 포인터는 포인터 값을 (주소) 가 아닌 정수 값. 주소 nulll 아닙니다. 비록 일부 답변을 이스마 NULL 은 포인터입니다 가치: # 39, it& 일은 아닙니다. ' (Void *) 는 유일한 특별 해킹 0& # 180. c 에서, 이는 유효함 nulll. 다만 그 무시하시겠습니까 it& # 39 의 중요하지 않다.

Pod
그는 11년 전 댓글을 달았습니다
0

위 보러 cw 편집하십시오 대답. NULL 로 정의되는, (void *) 는 매크로 형태의 &quot 0".

Johannes Schaub - litb
그는 11년 전 댓글을 달았습니다
0

그냥 있을 수 있지만 아스웰 (void *) 0, 0 이 될 수 있습니다. 어떤 it& # 39 의 구현 정의된 널 포인터 상수를 사용됩니다.

39, & # 39 (void *) 0 널임 및 \0&. 끝에 seabreeze 구체화하십시오.