본문 바로가기
C언어/C 언어 중급

중급6강_C언어 문자열 함수 완전 정리 – 포인터로 문자열을 자유자재로 다루자!

by AI쌤 2025. 4. 21.
반응형

 

C언어에서 문자열은 단순한 문자의 나열이 아닌 포인터로 연결된 배열입니다.
이번 강의에서는 strcpy, strlen, strcmp 등의 문자열 처리 함수와
문자열 포인터의 원리를 실전 예제로 이해해봅니다.


🔤 C언어에서 문자열이란?

C언어 문자열은 char 배열에 널 문자('\0')가 끝에 붙은 형식입니다.

char str1[] = "Hello";
char *str2 = "World";
  • str1: 배열 방식으로 메모리에 저장됨
  • str2: 문자열 상수를 가리키는 포인터

📌 문자열 주요 함수 소개 (string.h)

함수 기능

strlen() 문자열 길이 반환
strcpy() 문자열 복사
strcat() 문자열 연결
strcmp() 문자열 비교
strchr() 문자 검색
strstr() 문자열 검색

📘 strlen() – 문자열 길이 구하기

#include <string.h>
int len = strlen("Apple");  // 5
  • 널 문자('\0') 이전까지의 길이 계산
  • 공백도 포함, 단 \0은 제외

📘 strcpy() – 문자열 복사

char dest[20];
strcpy(dest, "Banana");  // dest = "Banana"

❗ 버퍼 크기 초과 주의 (버퍼 오버플로우 위험)


📘 strcmp() – 문자열 비교

strcmp("Apple", "Apple")   → 0
strcmp("Apple", "Banana")  → 음수
strcmp("Orange", "Banana") → 양수
  • 리턴값: 같으면 0, 다르면 양수 또는 음수

📘 strcat() – 문자열 이어 붙이기

char str[20] = "Hello ";
strcat(str, "World");  // str = "Hello World"
  • 대상 버퍼는 충분히 커야 함
  • 복사+연결이기 때문에 strcpy 이후에 자주 사용됨

🧪 실전 예제: 문자열 입력받아 길이 출력

char name[100];
printf("이름 입력: ");
scanf("%s", name);
printf("길이: %lu\n", strlen(name));

🔄 문자열 포인터 vs 배열 차이

char str1[] = "Hello";   // 배열 (값 복사)
char *str2 = "Hello";    // 포인터 (주소 할당)

구분 배열 방식 포인터 방식

수정 가능 여부 가능 상수 영역 → 수정 불가 (에러 발생 가능)
메모리 구조 스택에 저장 데이터 영역 (읽기 전용)

💡 문자열 포인터 실습: 사용자 정의 함수 만들기

int my_strlen(const char *s) {
    int count = 0;
    while (*s++) count++;
    return count;
}

✅ *s++ 방식으로 포인터로 순회
✅ 문자열 끝인 \0까지 반복


🎯 실습 과제

  1. 문자열 입력받아 strlen, strcpy, strcmp 연습
  2. 포인터 방식으로 my_strcpy, my_strcmp 직접 구현
  3. 배열과 포인터 방식의 차이점 비교 실험

📘 요약 정리

함수 주요 역할 유의사항

strlen 문자열 길이 \0 전까지 계산
strcpy 문자열 복사 대상 배열 충분히 커야 함
strcmp 문자열 비교 반환값으로 크기 비교 가능
strcat 문자열 합치기 기존 문자열의 끝에 이어 붙임

🗣 다음 주 예고: 구조체(struct) 기초 – 데이터를 묶는 강력한 방법

다음 강의에서는 C언어의 핵심 데이터 구조인
**구조체(struct)**에 대해 배웁니다.
실제 프로그램에서 다양한 데이터 유형을 함께 묶어 다루는 방법을 소개합니다.

 

반응형