본문으로 이동

미디어위키 1.45 안정화가 거의 끝났습니다. 다만 Flow 확장 기능 관련 이슈가 있어서 대체하는 작업을 수행할 계획입니다.

  1. 큰숲백과:청사진에서 위키 발전의 대략적인 방향성을 제시했습니다. 의견이 있으신 분은 큰숲백과토론:청사진에서 의견을 남겨주시면 좋겠습니다.
  2. 기능상의 오류로 지원하지 않고 있는 기능에 대해서는 큰숲백과토론:이슈 트래커에 요약했습니다. 참고하시기 바랍니다.
  3. 데이터베이스 덤프 받고싶으신 분은 큰숲백과 가입 후에 사용자토론:Bigforest에 의견 남겨주시면 ftp 주소, 계정, 비밀번호를 특수:EmailUser를 통해서 공개할 예정입니다.

작은숲:위키노트/초보자를 위한 C 언어 강의/널 문자와 널 포인터

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
Utolee90 (토론 | 기여)님의 2022년 5월 7일 (토) 13:58 판 (top: move articles, replaced: C 언어C 언어)

프로그래밍 언어에서 null이라는 것은 조금 특별한 의미를 갖는다. 이 null이라는 것은 0을 의미하고 있다. 그럼 C 언어에서 널 문자와 널 포인터는 과연 어떤 차이가 있을까? 널 문자(Null character)는 말 그대로 문자이다. 문자는 문자인데, 값이 0인 문자를 말한다. 일반적으로 문자는 그 문자에 해당되는 ASCII 코드값을 가지고 있다. 그런데 이 널 문자는 일반 문자와는 다른 일을 하기 위해 0이라는 값을 가지고 있다. 하지만 다른 문자와 마찬가지로 데이터형은 char 형입니다. 그리고, 널 문자는 '\0'으로 표현한다. 이 널 문자는 문자열에서 제대로 힘을 쓴다. 바로 문자열의 끝을 표현하기 위해 이 널 문자를 사용한다. 즉, 아래와 같은 두 문장이 있다면 이것들은 완전히 같은 것이다.

char str[] = "String";
char str[] = { 'S', 't', 'r', 'i', 'n', 'g', '\0' };

이와 같이 문자열에는 반드시 그 끝을 알려주는 널 문자가 들어있어야 한다. 그렇다면 아래와 같은 경우는 문자열이 아닐 것이다.

char str[] = { 'S', 't', 'r', 'i', 'n', 'g' };

지금 이 코드가 위에서 나온 것과 다른 점은 끝에 널 문자가 없다는 것이다. 이렇게 널 문자가 있느냐 없느냐에 따라 이게 문자열이 되느냐 안되느냐는 것이 결정된다. 따라서, 문자열에서 널 문자는 아주 중요한 일을 한다고 할 수 있다. 그럼 널 포인터(Null pointer)는 무엇일까? 널 포인터는 말 그대로 포인터이다. 즉, 널 문자와는 전혀 다른 것이다. 널 포인터는 주소 0을 가지고 있는 포인터이다. 이 널 포인터를 표현하기 위해 NULL을 사용하는데, 이것은 stdio.h 파일에 아래와 정의되어 있다.

#define NULL ((void *) 0)

그래서 이 널 포인터는 포인터 중에서도 좀 특별한 포인터가 되는 것이다. 일반적으로 이 널 포인터는 포인터를 리턴해주는 함수들에서 에러가 생겼음을 표현해주기 위해 사용된다. 대표적인 예로 malloc() 함수에서 메모리 할당을 실패했을 때 NULL 포인터를 되돌려준다. 그래서 우리는 이 리턴되는 값을 보고 제대로 할당이 됐는지 판별할 수 있다. 또 다른 예로는 파일을 열 때 사용하는 fopen() 함수를 생각할 수 있다. fopen() 함수도 파일(스트림)을 여는데 실패하면 NULL을 리턴하게 되어 있다. 이처럼 널 문자와 널 포인터는 이름이 비슷한 것처럼 0을 가지고 있다는 점은 같지만 가리키는 대상이 다르다. 0이 값인지 주소인지에 따라 널 문자인지 널 포인터인지 구별할 수 있다.

이 작은숲 문서의 출처는 위키노트의 위키노트: 문서입니다.