c에서의 배열이라 함은 '데이터 타입이 같은 것(이게 중요합니다.)들을 일렬로 늘어놓은 것' 이라 생각하시면 됩니다. 모든 프로그래밍 언어가 같은 유형을 내포하고 있는지는 모르겠습니다만 일반적으로 c에서는 '문자 배열(따로 문자열 타입이 존재하지 않으므로)' 끝에 널 문자를 포함(그렇게 하지 않으면 해당 문자열이 어디까지가 끝인지 해당 컴파일러가 알 수 없으므로)하도록 규정하고 있는 것으로 알고있습니다. 따라서 문자 배열 생성 시 널 문자를 고려하여 길이를 선언해야 하겠죠.
만약 apple이란 문자열을 저장한다고 치면, 총 6의 길이를 가진 배열이 필요한 이유가 이런 이유 때문이죠.
문자열 배열이 문자열의 끝을 알기 위해서 NULL을 사용합니다.
K 문자는 문자가 이미 하나라는 것을 알기 때문에 굳이 NULL 문자를 쓰지 않아도 됩니다.
그러나 KLDP 라는 문자열은 그 끝을 알 수 없기 때문에 NULL 문자로 지정해 주는 것입니다.
배열 얘기로 설명해 드리겠습니다.
배열 크기가 10일때의 경우를 가정합니다.
문자 K를 읽습니다.
배열의 첫번째만 사용하겠죠. 문자이기 때문에 하나 이상 읽어들일 이유가 없습니다.
문자열 KLDP를 읽습니다.
배열의 네번째까지 사용할 것입니다. 그런데 KLDPress! 가 나왔습니다.
문자열 KLDP를 출력하려고 했는데? 고민에 빠지는 거죠.
문제는 이렇습니다.
[K] [L] [D] [P] [r] [e] [s] [s] [!] [NULL]
프로그램이 문자열의 끝을 알 수 있는 방법은 NULL 문자 뿐입니다.
우리가 문자열의 끝에 NULL을 두어야 하는 이유죠.
[K] [L] [D] [P] [NULL]
이었다면 정상적으로 출력됩니다.
만약 문자열의 길이만큼만 배열의 크기를 제한하겠다면, 문자열의 길이에 1을 더해주세요.
마지막에 NULL 문자가 들어가야 합니다.
배열의 개념을 어떤식으로 생각하시는지는 모르겠습니다만...
c에서의 배열이라 함은 '데이터 타입이 같은 것(이게 중요합니다.)들을 일렬로 늘어놓은 것' 이라 생각하시면 됩니다. 모든 프로그래밍 언어가 같은 유형을 내포하고 있는지는 모르겠습니다만 일반적으로 c에서는 '문자 배열(따로 문자열 타입이 존재하지 않으므로)' 끝에 널 문자를 포함(그렇게 하지 않으면 해당 문자열이 어디까지가 끝인지 해당 컴파일러가 알 수 없으므로)하도록 규정하고 있는 것으로 알고있습니다. 따라서 문자 배열 생성 시 널 문자를 고려하여 길이를 선언해야 하겠죠.
만약 apple이란 문자열을 저장한다고 치면, 총 6의 길이를 가진 배열이 필요한 이유가 이런 이유 때문이죠.
문자열 배열이 문자열의 끝을 알기 위해서 NULL을
문자열 배열이 문자열의 끝을 알기 위해서 NULL을 사용합니다.
K 문자는 문자가 이미 하나라는 것을 알기 때문에 굳이 NULL 문자를 쓰지 않아도 됩니다.
그러나 KLDP 라는 문자열은 그 끝을 알 수 없기 때문에 NULL 문자로 지정해 주는 것입니다.
배열 얘기로 설명해 드리겠습니다.
배열 크기가 10일때의 경우를 가정합니다.
문자 K를 읽습니다.
배열의 첫번째만 사용하겠죠. 문자이기 때문에 하나 이상 읽어들일 이유가 없습니다.
문자열 KLDP를 읽습니다.
배열의 네번째까지 사용할 것입니다. 그런데 KLDPress! 가 나왔습니다.
문자열 KLDP를 출력하려고 했는데? 고민에 빠지는 거죠.
문제는 이렇습니다.
[K] [L] [D] [P] [r] [e] [s] [s] [!] [NULL]
프로그램이 문자열의 끝을 알 수 있는 방법은 NULL 문자 뿐입니다.
우리가 문자열의 끝에 NULL을 두어야 하는 이유죠.
[K] [L] [D] [P] [NULL]
이었다면 정상적으로 출력됩니다.
만약 문자열의 길이만큼만 배열의 크기를 제한하겠다면, 문자열의 길이에 1을 더해주세요.
마지막에 NULL 문자가 들어가야 합니다.
문자열이 아닌 일반 배열의 경우라 하더라도 데이터의
문자열이 아닌 일반 배열의 경우라 하더라도 데이터의 개수를 알고 있어야 합니다.
C언어 표준 문자열의 경우는 데이터의 개수 대신 문자열의 끝에 '\0' ( (char)00 의 의미 => 0번 문자 == 널 문자 ) 를 쓰기로 한 것이고,
아예 길이를 고정한 문자열 형태로 쓸 수도 있고, COM의 BSTR(Basic String)처럼 헤더를 두어 헤더에 길이 정보를 포함시킬 수도 있습니다.
댓글 달기