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" 부분은 그것이 불가능하다.
'C_Data Structure_Algorithm > C String' 카테고리의 다른 글
5) (예제2)C isspace, read_line(줄단위 읽기 ) (0) | 2020.02.27 |
---|---|
4) (예제1)scanf, fgets, gets 함수 차이점 (0) | 2020.02.26 |
3) 파일로 입출력하기 (0) | 2020.02.26 |
2) 문자열 기본 함수 (0) | 2020.02.25 |