티스토리 뷰

Daylogs/C

C: 배열과 문자열

ohgyun 2016. 4. 23. 20:26
이전 글: 2. 함수와 변수에서 계속



배열 선언

int arr[3];
int len = 3;
int arr2[len];
int arr3[3] = {1, 2, 3};
int arr4[] = {1, 2, 3}; // 컴파일러에 의해 자동으로 3 삽입
int arr5[5] = {1, 2, 3}; // 나머지 부분은 0으로 채워짐


!! 배열의 크기를 벗어난 인덱스에 접근해도 컴파일 에러가 발생하지 않는다.
컴파일러는 배열 접근에 있어서는 유효성 검사를 진행하지 않기 때문이다.
이 경우, 할당하지 않은 메모리 공간을 침범하게 되므로 반드시 주의해야 한다.

int arr[3];
arr[3] = 10; // 컴파일 에러를 발생하지 않는다.


배열의 이름을 대상으로 하는 sizeof 연산의 결과는 '바이트 단위의 배열의 크기'가 반환된다. 



배열과 문자열

C 언어는 큰 따옴표를 이용해 문자열을 표현한다.

char str[] = "Good";

메모리 공간에는 char형 배열이 할당되고, 이 배열에는 아래 형태로 저장된다. 
[ G ] [ o ] [ o ] [ d ] [ \0 ]
총 5개의 공간이 생성되고 마지막에는 특수문자가 삽입된다.

\0은 특수문자로 문자열 끝에 자동으로 삽입되면 'null'문자라 한다.
널 문자의 아스키 코드값은 0이고, 이를 문자 형태로 출력할 경우 아무런 출력이 발생하지 않는다.


scanf("%s", str); // 문자열을 입력받는 경우, &str 이라 하지 않는다.
또한, scanf로 입력받는 문자열의 끝에도 널 문자가 삽입되어 있다.

!!! "C 언어에서 표현하는 모든 문자열의 끝에는 널 문자가 자동으로 삽입된다."
문자열에 있어서 널 문자의 존재는 매우 중요하다.
널 문자가 존재하면 문자열이고, 그렇지 않으면 문자열이 아니다.

char arr1[] = {'H', 'i'} ; //--> 단순히 문자가 저장된 배열이다.
char arr2[] = {'H', 'i', '\0'}; //--> 문자열이다.

널 문자는, 문자열의 끝은 표시하기 위한 문자이다.
널 문자의 아스키 코드는 0 이므로, 아래 두 문장은 동일하다.
str[8] = '\0';
str[8] = 0




다음 글: 4. 포인터와 배열


반응형
댓글
공지사항