본문 바로가기
프로그래밍 언어/C++

C++에서 NULL , NUL, 0, \0 의 차이

by Jo_Wick 2025. 9. 27.
반응형

1. 0

 

  • 그냥 정수 상수 literal 0.
  • 타입은 int.
  • 포인터 문맥에서는 null pointer 상수로도 해석될 수 있음
int* p = 0;   // p는 nullptr과 같은 의미

 

 

2. ' \0 '

  • 문자 상수.
  • 실제 값은 0을 가진 char.
  • 문자열 종료 문자(NUL character)를 표현할 때 쓰임.
char c = '\0';   // c == 0
const char* s = "Hi"; 
// s는 'H' 'i' '\0' 로 끝남

 

예를 들어 

char str[6] = "Hello"; 
// 'H' 'e' 'l' 'l' 'o' '\0' 이렇게 이루어져 있음.

char str[6] = "Hello\0"; 
// 에러 'H' 'e' 'l' 'l' 'o' '\0' '\0' 총 7개의 문자가 들어가야 하지만 공간이 6개밖에 없음.

// C/C++에서 문자열 리터럴은 항상 마지막에 '\0'(NUL 문자)가 자동으로 붙는다.

 

3. NULL

  • C/C++에서 전통적으로 쓰던 널 포인터 상수 매크宏.
  • 보통 <cstddef> 헤더에서 정의됨:
    • C++03까지는 #define NULL 0 또는 #define NULL ((void*)0)
    • C++11 이후에도 0 또는 nullptr로 정의 가능
  • 즉, NULL은 문자 NUL이 아니라 포인터 null을 의미.
int* p = NULL;   // 널 포인터
int* p = nullptr; // 널 포인터
int* p = 0; // 널 포인터

 

4. NUL

  • ASCII 제어문자 이름 중 하나.
  • 값이 0인 문자 (U+0000) 를 의미.
  • 보통 코드에서 '\0'으로 표현하지 NUL이라는 이름은 표준에 정의된 건 아님.
    (C/C++ 표준 매크로도 아님. 보통 문서, ASCII 테이블 설명에서 사용됨)
  • 즉, "문자 집합에서 값 0을 가진 제어문자"를 가리키는 용어.
반응형

댓글