C언어의 기초 문법

NULL

빈문자; "아무것도 없다"

 선언 방법은 전에 보셨듯이, char a[6] = "hello"처럼 쌍따옴표 "" 를 사용해서 변수를 선언할 수 있다고 했습니다. 그런데 왜 굳이 변수 5개를 선언하는 것이 아니라 6개를 선언하는 걸까요? 그것은 바로 NULL 때문에 그렇다고 볼 수 있습니다. 6번째 변수에는 아무 문자도 들어가 있지 않아서 빈 문자로 해당되는데, 이것이 바로 NULL입니다. NULL은 '없다'라고 생각하시면 됩니다. 왜냐하면 ASCII 값이 0이거든요. 기호문자도 \0이고요. 다른 뜻들이 있긴 하지만, 그건 포인터에 나오는 거에요;;; 지금은 아실 필요가 없습니다. 그러면 전에 선언했던 a의 값은 h, e, l, l, o, NULL라고 볼 수 있습니다. 여기에 NULL을 넣는 이유는 배열의 안정성 때문입니다. 만약 원소 끝에 NULL을 넣지 않으면 저도 어떻게 되는 지는 모르겠지만(실제로 안 해봐서) 이상한 값이 나온다고 하더라고요;;; 그래서 뒤에 NULL을 넣는다고 합니다. 또 다른 이유도 있는데, 다음과 같이 반복문에서 활용할 수 있습니다.

char c[6] = "hello";
int i;
for(i = 0; c[i] != NULL; i++){
    printf("%c", c[i]);
}
return 0;

여기에서 for문의 변화를 보실 수 있죠? i가 NULL에 도착할 때까지 돈다는 뜻입니다. 다음과 같이 활용할 수 있습니다. 다음에는 문자열 배열의 입출력에 대해서 알아보겠습니다.

댓글

댓글 본문
  1. Joel
    늦은 답글 죄송합니다. 차이점 없습니다. 표현 방식이 다를 뿐이죠
    대화보기
    • PARU
      char c[6] = {'H', 'E', 'L', 'L', 'O', NULL}; // c는 문자열 배열이고 값은 H, E, L, L, O입니다
      char s[6] = "HELLO"; // s는 문자열 배열이고 값은 H, E, L, L, O입니다.

      그 앞서 써주셨던 부분인데요..! 위 두개의 차이가 있는건가요??
    • Joel
      #include <stdio.h>

      int main() {

      char c[6] = "hello";
      int i;
      for (i = 0; c[i] != NULL; i++) {
      printf("%c", c[i]);
      }
      return 0;
      }


      이렇게 해야 맞겠네요. 제가 무슨 생각을 하고 있었는지는 모르겠지만 %d를 써버렸네요. 이렇게 되면 당연히 ASCII값이 나와서 이상한 결과가 나오게 되는데;;; 그리고 오타까지 있었네요
      대화보기
      • PARU
        출력이 안되는데 어디가 잘못된 걸까요

        #include <stdio.h>

        int main() {

        char c[6] = "hello";
        int i;
        for (i = 0; i != NULL; i++) {
        printf("%d", c[i]);
        }
        return 0;
        }