본문으로 건너뛰기

문자열 다루기

1. 문자열의 개념

C 언어에서 문자문자열은 다르게 다룹니다.

1.1. 문자의 특징

  • 단일 문자는 작은따옴표(' ')로 표현 (예: 'A')
  • char형으로 선언 (예: char a;)
  • 입출력 시 %c 형식 지정자 사용

1.2. 문자열의 특징

  • 문자열은 큰따옴표(" ")로 표현 (예: "A", "ABC")
  • 표시 방법
    • 문자 배열 선언: char a[10];
    • 포인터 변수 선언: char *a;
  • NULL 문자(\0)
    • 문자열의 마지막은 항상 NULL(\0)
    • 문자열 배열은 "문자열+1" 크기로 선언 필요
    • 출력 시 NULL 전까지 출력
    • 입출력 시 %s 형식 지정자 사용

1.3. 문자 배열 초기화

  • 개별 문자 초기화:

    char test[10] = {'a','b','c','d','\0'};
  • 문자열 리터럴 초기화:

    char test[10] = "abcd"; // 마지막에 NULL 자동 포함
  • 빈 문자열 초기화:

    char test[10] = " ";
  • 크기 명시 없이 초기화:

    char test[] = "abcd";
  • 포인터를 통한 초기화:

    char *test = "abcd"; // 읽기 전용, 변경 불가

주의:

  • NULL 전까지의 문자만 출력
  • 이미 선언된 배열에 문자열 리터럴 직접 대입 불가 (선언 즉시 초기화 필요)
  • 이미 선언된 배열은 각 인덱스에 문자 입력 가능

1.4. 문자 및 문자열 관련 입출력 함수 비교

구분함수설명
문자getchar()문자 하나 입력
문자putchar(a)문자 하나 출력
문자scanf("%c", &a);문자 하나 입력 (주소 연산자 필요)
문자printf("%c", a);문자 하나 출력
문자열gets_s(name, 30)문자열 입력 (안전)
문자열gets(name)문자열 입력 (비권장, 버퍼 오버플로우 위험)
문자열puts(name);문자열 출력 (자동 개행)
문자열scanf("%s", name);문자열 입력 (공백 전까지)
문자열printf("%s", name);문자열 출력

입력 함수 주의:

  • scanf로 문자열 입력 시 공백/엔터 전까지만 저장
  • gets로 입력 시 엔터 전까지만 저장

2. 문자열 관련 라이브러리 함수

C 언어는 문자/문자열 처리를 위한 다양한 라이브러리 함수를 제공합니다.

2.1. ctype.h 라이브러리 (문자 관련)

#include <ctype.h>

함수설명반환 값
isalpha(a)a가 영문자인지 판별참/거짓
isupper(a)a가 대문자인지 판별참/거짓
islower(a)a가 소문자인지 판별참/거짓
isspace(a)a가 공백/개행/탭인지 판별참/거짓
toupper(a)a를 대문자로 변환변환된 문자
tolower(a)a를 소문자로 변환변환된 문자
toascii(a)a를 아스키 코드로 변환아스키 코드 값

2.2. string.h 라이브러리 (문자열 관련)

#include <string.h>

함수설명
strlen(s)문자열 s의 길이 반환 (NULL 미포함)
strcpy(s1, s2)s2를 s1에 복사 (s1 공간 충분해야 함)
strcat(s1, s2)s2를 s1 끝에 붙임 (s1 공간 충분해야 함)
strcmp(s1, s2)두 문자열 비교 (0:같음, 음수:앞섬, 양수:뒤섬)
strtok(s1, deli)s1을 deli(구분자)로 토큰 분리, 이후 NULL로 반복 호출
strstr(s1, s2)s1에서 s2가 처음 나타나는 위치 포인터 반환, 없으면 NULL

참고: Visual Studio에서 strtok 사용 시 #pragma warning(disable:4996) 필요할 수 있음

2.3. 문자열 배열

  • 2차원 문자 배열

    char fruit[3][10] = { "apple", "bann ", "pear " };
    // 각 문자열 최대 길이 명시, 고정 크기
  • 문자열 포인터 배열

    char *fruit[3] = { "apple", "bann ", "pear " };
    // 각 포인터가 문자열 리터럴 가리킴, 길이 가변