C언어에서 문자열은 아스키 코드의 나열이예요.
특히 아스키 코드 값이 0인 문자를 널문자(‘\0’)라고 부르는데 문자열은 널문자를 만나기 전까지의 아스키 코드 나열이예요.
따라서 문자열을 char 형식 원소 배열을 선언할 때 널문자를 포함하여 원소 개수를 정하세요.
이 책에서는 문자열을 배열로 관리할 때 원소 개수를 나타내는 부분을
MAX_NAME_LEN+1 처럼 표현하고 있어요.
#define
MAX_NAME_LEN 50
char
name[MAX_NAME_LEN+1] = {'a','b','c'};
그리고 C언어에서는 문자열 리터럴 상수를 초기화 구문에서도 사용할 수 있어요.
#define
MAX_ADDR_LEN 100
char
addr[MAX_ADDR_LEN+1] = "제주도 제주시 애월읍 고내리";
◈
char 형식 배열에 문자열 초기화
#include <stdio.h>
#define
MAX_NAME_LEN 50
#define
MAX_ADDR_LEN 100
int main()
{
char name[MAX_NAME_LEN+1] = {'a','b','c'};
char addr[MAX_ADDR_LEN+1] = "제주도 제주시 애월읍 고내리";
printf("이름:%s\n",name);
printf("주소:%s\n",addr);
return 0;
}
◈ 실행 결과
이름:abc
주소:제주도 제주시 애월읍 고내리
문자열 리터럴 상수를 포인터 변수로 사용할 수도 있어요.
주의할 점은 포인터는 단순히 문자열이 있는 주소를 기억할 뿐이예요.
문자열을 변경하는 작업은 할 수 없어요.
따라서 문자열 데이터를 상수로 사용할 때는 const char
*로 변수를 선언하세요.
const char *str = "안녕하세요.";
선언문에 const 키워드를 나타내어 상수화하는 것을 알고 있죠.
포인터 변수를 선언할 때 const 키워드는 여러 위치에 표현할 수 있으며 위치에 따라 의미가 달라져요.
만약 선언한 이름 앞에 const가 붙으면 포인터 상수를 선언한 것이 되며 값을 변경하지 못해요.
char * const str1 =
name;
//str1++; str1의 값을 변경할 수 없음
str1[0] = 'k';
포인터 선언문의 지시 연산자 * 앞에 const가 붙으면 가리키는 곳의 값을 변경하지 못한다는 의미예요.
const char *str2 =
name;
str2++;
//str2[0]='k';str2로 간접 연산이나 인덱스 연산으로 가리키는 원소의 값을 변경할 수 없음
참고로 const char *str2;와 char const *str2; 는 같은 표현이예요.
실제 프로그래밍을 하다보면 *앞에 const가 붙는 const char
*str2;나 char const
*str2; 와 같은 표현은 자주 만나요.
특히 함수의 입력 매개 변수로 사용할 때가 많은데 호출하는 곳에서 전달받은 문자열을 변경하지 않고 사용만 하겠다는 의미죠.
void View(const char *str)
{
printf("%s\n",str);
}
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[C언어] 74. 구조체 (0) | 2016.04.17 |
---|---|
[C언어] 73. 문자열 정리하기 (0) | 2016.04.17 |
[C언어] 72. 문자열 복사 (0) | 2016.04.17 |
[C언어] 71. 문자열 비교와 strcmp 함수 (0) | 2016.04.17 |
[C언어] 70. 문자열 길이와 strlen 함수 (0) | 2016.04.17 |
[C언어] 68. 문자열 (0) | 2016.04.17 |
67. 정리하기 (0) | 2016.01.01 |
66. 구현 (0) | 2016.01.01 |
65. 테스트 코드 작성하기 (0) | 2016.01.01 |
64. 함수 원형 결정 (0) | 2016.01.01 |