Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

포인터로 배우는 C 언어 문자열의 핵심 개념과 예제 프로그램


문자(character)들이 모여 이루어진 배열을 문자열(string)이라고 합니다. C 언어에서 문자열은 널 문자('\0')로 끝난다는 특징이 있습니다.

선언

문자열 배열을 선언하는 문법은 다음과 같습니다.

char stringname [size];

예를 들어 char string[50];은 길이 50자를 저장할 수 있는 문자열을 선언하는 코드입니다.

초기화

문자열은 크게 두 가지 방법으로 초기화할 수 있습니다.

  • 단일 문자 상수를 사용하는 방법
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
  • 문자열 상수를 사용하는 방법
char string[10] = "Hello";

접근(Accessing) - 서식 지정자 "%s"를 사용하면 널 문자('\0')를 만날 때까지 문자열 전체를 읽어 한 번에 출력할 수 있습니다.

그렇다면 C 언어에서 포인터 배열이란 무엇일까요?

포인터 배열(문자열을 가리키는 포인터 배열)

  • 각 요소가 문자열의 시작 주소(base address)를 가리키는 포인터로 이루어진 배열입니다.
  • 다음과 같이 선언하고 초기화합니다.
char *a[ ] = {"one", "two", "three"};

여기서 각 요소는 다음과 같이 동작합니다.

  • a[0] : 문자열 "one"의 시작 주소를 가리키는 포인터
  • a[1] : 문자열 "two"의 시작 주소를 가리키는 포인터
  • a[2] : 문자열 "three"의 시작 주소를 가리키는 포인터

예제 1: 문자열과 포인터의 기본

다음은 문자열의 개념을 보여주는 C 프로그램입니다.

#include<stdio.h>
#include<string.h>
void main(){
    //문자열과 포인터 선언//
    char *s="Meghana";
    //결과 출력//
    printf("%s\n",s); //Meghana//
    printf("%c\n",s); //%c에는 반드시 *를 붙인 값을 넣어야 합니다. 그렇지 않으면 정상적인 출력이 나오지 않습니다//
    printf("%c\n",*s); //M : 시작 주소에 저장된 문자이기 때문입니다//
    printf("%c\n",*(s+4)); //a : 다섯 번째 글자로, (시작 주소+4)번째 위치의 문자이기 때문입니다//
    printf("%c\n",*s+5); //R : 시작 주소의 문자에서 알파벳 순으로 5를 더한 값이기 때문입니다//
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Meghana
M
a
R

예제 2: 전위·후위 증가 연산자 활용

이번에는 전위 증가 연산자(++s)와 후위 증가 연산자(s++)를 사용하여 문자를 출력하는 예제를 살펴보겠습니다.

#include<stdio.h>
#include<string.h>
void main(){
    //문자열과 포인터 선언//
    char *s="Meghana";
    //결과 출력//
    printf("%s\n",s); //Meghana//
    printf("%c\n",++s+3); //s가 2번째 위치('e')로 이동. 쓰레깃값(garbage value)이 출력됨//
    printf("%c\n",s+++3); //s가 3번째 위치('g')로 이동. 쓰레깃값(garbage value)이 출력됨//
    printf("%c\n",*++s+3); //s=3에서 1 증가하여 'h'를 가리킴. s는 4번째 위치로 이동. h+3 = k 출력//
    printf("%c\n",*s+++3); //s=4일 때 값은 h. h+3 = k 출력. 이후 s는 1 증가하여 5번째 위치가 됨//
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Meghana
d
d
k
k