C언어 강좌 문자열 배열과 null

Posted by ironmask84
2015. 4. 3. 16:53 컴퓨터공학/C언어 레퍼런스


출처 : http://blog.naver.com/kwy4122?Redirect=Log&logNo=220305490766

■ 배열까지 진도가 나갔네요. ㅎㅎ 혹시 이 글을 가장 먼저 보시는 분들은 배열의 개념에 관련된 내용은 앞쪽 글들 참고하시고요. 여기서는 문자열 배열(char)과 null에 대해서 알아보겠습니다. 


■ C언어 자료형 중에서 char 자료형을 이용하면 문자열 배열을 저장할 수 있고, 변경도 가능합니다. 변경이 가능하다는 건 변수 형태로 문자열 저장이 가능하다는 의미이기도 하겠죠? C언어에서는 문자열을 표현할 때 큰따옴표(")를 사용하는데요. 이번에도 역시 예제를 먼저 만들어보겠습니다.



■ char형 aaa라는 배열이 메모리에 할당되고, [Hello World!] 문자열이 순서대로 저장됩니다. 그리고 지난 글에서 알아봤던 sizeof() 함수를 이용해서 배열의 길이를 구해서 출력하고 있는데요. 배열의 길이가 '13'이군요. 위 예제에서 char aaa[]="Hellw World!"는 char aaa[13]..... 인데, 배열 길이 값 '13'을 생략하고 초기화 하면 컴파일러가 자동으로 길이 값을 채워준다는 것도 배열 개념 알아볼 때 정리했었습니다. 참고하시구요. 


■ 그런데 좀 이상하지 않나요? 큰따옴표 안에는 공백 포함해서 정확히 12개의 문자열이 저장되어 있습니다. 아직 안 세어보셨으면 세어보세요. 분명히 공백 포함해서 12개입니다. 그런데 배열의 길이가 13으로 표시되네요? 여기에서 null 문자(\0)가 등장하게 됩니다. C언어에서는 문자열을 저장할 때 맨 마지막에 무조건 null 문자가 저장되는데요. 이유는 다음과 같습니다. 


■ 메모리에 문자열이 저장될 때 이진수로 저장되기 때문에 문자열의 시작과 끝을 표시할 수 있는 방법이 없습니다. 하지만 문자열의 시작은 char aaa[0]; 자리인 건 알 수 있습니다. 문제는 끝을 알 수가 없다는 건데요. 그 끝을 표시해주는 게 null 문자(\0)입니다. 그래서 무조건 문자열의 끝에는 null 문자가 붙게 됩니다. 이 녀석의 아스키코드값과 char형의 값을 출력해보겠습니다.



■ 배열의 마지막 자리[13]에 있는 null의 값을 정수와 문자 형태로 출력했습니다. 숫자 값은 "0"인걸 알 수 있고요. 문자 형태의 값은 아무것도 없습니다. 여기서 주의해야 할게 하나 있는데요. 공백이 아니고, 아무것도 없는 겁니다. 참고로 공백의 아스키코드값은 "32"입니다. 마지막으로 null과 " " 공백의 아스키코드 값을 출력해볼게요.



■ char 형태의 '\0'과 공백 ' '의 값을 정수(%d) 형태로 출력하고 있는 내용입니다. 확실하게 구분이 되죠?^^