본문 바로가기

C_Data Structure_Algorithm/C String

1) 문자열 개요

1) 개요


C 언어에서 문자열을 저장하는 방법은

문자배열을 만들어서,

각 칸에 한글자씩 저장하는 것이다.

hello 인데 크기가 6인 문자열 ( char str[6] )을 할당한다.

문자열 마지막에 NULL 이 들어간 것이다.

문자열의 맨 끝에 NULL 을 넣는 것은, C언어의

문법적으로 틀린 것은 아니지만

C 언어가 제공하는 라이브러리 대부분이

문자열을 다룰 때, 끝에 NULL 이 있다라는 가정을 두고 기능한다.

ex. printf( )

즉, NULL CHAR 의 역할은 이 부분이 문자열의 끝이다 라는 것을 알려주는 것이다.

문자열을 생성하는 편리한 방법이

격 따옴표 연산자 ex. char str[ ] = "hello"

이렇게 하게 되면,

C compiler 가 문자열 뒤의 문자개수를 count 해서,

자동으로 크기를 할당한다.

ex. char str[ ] = "hello"

이에 대해, 자동으로 str[ 6 ] 이라고 할당하는 것이다.

char str[] = "hello" //- < 포인터 > // 배열의 이름은, 그 배열의 시작 주소를 // 가리키는 포인터 변수이다. // 문자열을 생성할 때 아래와 같이 할 수 있다. // "hello" 문장에서 hello를 저장하는 6byte 의 메모리 공간이 할당되고, 거기에 NULL 까지 저장된 다음에 , 그 배열의 시작 주소를 return 해주면, "문자형" 포인터 변수 str 에 저장하는 것이다. 즉, str 은, "hello" 담긴 배열의 시작점 주소를 가리키는 포인터 주소이다. char *str = "hello"

위의 2 문장은 중요한 차이점이 있다.

char str[ ] = "hello"

hello 와 NULL 이 저장된, 문자 배열일 뿐이다.

이 배열 안에 있는 , 이 문자열 안에 있는 값을 얼마든지 수정가능하다. ex. 'h' 대신에 'k' 를 쓰는 등

char *str = "hello"

이것은 문자 배열이 아니라

string literal , 이다.

즉, 일반적으로 literal 은 수정이 불가능하다는 것

즉, char *str = "hello"는 수정이 불가능한 부분이다.

이 경우에는 str 이 hello 가 아닌, 전혀 다른 문자열 혹은 부분을 가리키도록 할 수 있지만,

char str[ ] = "hello" 부분은 그것이 불가능하다.