<aside> <img src="/icons/light-bulb_gray.svg" alt="/icons/light-bulb_gray.svg" width="40px" /> 요약

1. NUL과 ‘\0’은 같고, NUL과 ‘0’은 다르다.

스크린샷 2023-10-27 12.57.36.png

출처: https://www.ascii-code.com/

출처: https://www.ascii-code.com/

Definition Data Type
NUL ASCII코드의 Symbol 값 NUL char
‘\0’ ASCII코드의 OCT값 char
'0’ ASCII코드의 Symbol 값 0 char
  1. **NUL(널 또는 널 문자)**는 문자열 처리에서 사용되고, NULL(널 또는 널 포인터)은 주로 포인터 변수에서 사용된다. NUL은 문자열 처리에서, NULL은 포인터 변수에서 숫자 0으로 대체하여 사용가능 하지만, 그 이외에는 명시적 형변환을 사용하지 않는 이상 서로 대체가 불가하다.
Definition Data Type Type Coversion
NULL NULL 포인터 0x00000000 pointer(void *)0 (포인터변수)0
0 정수 0 int (포인터변수)NULL, (문자열변수)NUL
NUL ASCII코드의 Symbol 값이 NUL char (문자열변수)0
//변수 초기화하는 법
char val = '\\0';
char val = 0;
int val = 0; 

//배열 초기화하는 법
char val[10] = {'a', 'b', 'c', '\\0'};  //문자열의 끝을 알림
char val[10] = {0}; 
 
//포인터변수 초기화하는 법
char *ptr = NULL 
char *ptr = 0
//주의: int val = NULL과 int val = 0 은 다르다

</aside>

1. NUL

[1] NUL의 정의

NUL은 ASCII코드에서 문자 NUL을 나타낸다.

주로 문자열 처리에서 문자열의 끝을 나타내는 종료문자로 사용됨.

[2] NUL과 ‘\0’ 비교 - 같은 Symbol

스크린샷 2023-10-27 12.57.36.png

출처: https://www.ascii-code.com/

출처: https://www.ascii-code.com/

‘\0’은 ASCII코드를 사용할 때 쓰는 문법. ‘\0’은 ASCII코드의 NUL을 의미한다. 백슬래쉬(\) 뒤에 ASCII코드의 8진수(OCT)값을 넣어줄 때, 정수로 출력하면(%d) ASCII코드의 10진수 값이, 문자로 출력하면(%c) ASCII코드이 Symbol 값이 출력된다.

#include <stdio.h>
int main(void)
{
	int a = '\\0';
	char b = '\\0';
	int c = '\\101';
	char d = '\\101';
	printf("%d\\n", a);
	printf("%c\\n", b);
	printf("%d\\n", c);
	printf("%c\\n", d);
	return (0);
}

[3] NUL과 ‘0’ 비교 - 다른 Symbol

스크린샷 2023-10-27 13.13.38.png

출처: https://www.ascii-code.com/

출처: https://www.ascii-code.com/

NUL(‘\0’)은 ASCII코드의 8진수(OCT)를 가리키고, ‘0’은 ASCII코드의 Symbol을 가리킨다.

#include <stdio.h>
int main(void)
{
	int a = '\\0';
	char b = '\\0';
	int c = '0';
	char d = '0';
	printf("%d\\n", a);
	printf("%c\\n", b);
	printf("%d\\n", c);
	printf("%c\\n", d);
	return (0);
}

[4] NUL과 0의 관계

1) 문자형 변수, 정수형 변수에서 사용

C언어에서 char은 8비트 정수형 처리 변수이다. C언어에선 문자와 정수 타입간의 암묵적 형변환이 발생하므로, 아래 코드에서 모두 같은 결과값이 출력된다.

#include <stdio.h>
int main(void)
{
	char a = '\\0';
	char b = 0;
	int c = '\\0';
	int d = 0;
	printf("%d\\n", a);
	printf("%c\\n", a);
	printf("%d\\n", b);
	printf("%c\\n", b);
	printf("%d\\n", c);
	printf("%c\\n", c);	
	printf("%d\\n", d);
	printf("%c\\n", d);
	return (0);
}

2) 배열에서 사용