언어 자료구조 알고리즘/디딤돌 C언어

[C언어] 69. 문자열 사용 기초

언제나휴일 2016. 4. 17. 16:07
반응형



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);
}

반응형