반응형
C언어에서 문자열은 독립된 자료형이 아닌 '널 문자(\0)로 끝나는 문자 배열'입니다. 이 배열을 효율적으로 다루기 위해 반드시 익혀야 하는 것이 바로 <string.h> 헤더 파일입니다.
오늘은 문자열 처리의 기초이자 실무에서 가장 많이 쓰이는 길이 측정(strlen)과 안전한 복사(strcpy, strncpy)에 대해 완벽하게 정리해 보겠습니다.

1. <string.h> 헤더 파일 개요
<string.h>는 문자열 조작을 위한 표준 함수들을 담고 있습니다. 단순히 문자를 복사하는 것부터 특정 문자를 찾는 기능까지 다양한 API를 제공합니다.
주요 기능 요약
- 길이 측정: strlen
- 복사 및 이동: strcpy, strncpy, memcpy
- 결합 및 비교: strcat, strcmp
- 검색 및 분할: strchr, strstr, strtok
2. strlen: 문자열의 진짜 길이는?
strlen 함수는 문자열의 시작부터 널 문자(\0) 직전까지의 문자의 개수를 세어 반환합니다.
2.1 예제 및 특징
C
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello"; // 'H','e','l','l','o','\0' 총 6바이트 저장
size_t length = strlen(str); // 널 문자를 제외한 5 반환
printf("문자열 길이: %zu\n", length);
return 0;
}
- 자료형: 반환형인 size_t는 부호 없는 정수형으로, 메모리 크기를 나타내는 데 최적화되어 있습니다.
- 시간 복잡도: 처음부터 끝까지 스캔하므로 문자열이 길어질수록 처리 시간이 늘어나는 O(n) 방식입니다.
3. strcpy vs strncpy: 안전한 복사 방법
문자열 복사 시 가장 주의해야 할 점은 '대상 버퍼의 크기'입니다.
3.1 strcpy (단순 복사 - 주의 필요)
원본 문자열을 대상 배열로 그대로 복사합니다. 널 문자(\0)까지 복사하지만, 대상 배열이 원본보다 작으면 버퍼 오버플로우가 발생하여 프로그램이 비정상 종료되거나 보안 취약점이 생길 수 있습니다.
C
char source[] = "Learning C";
char dest[20];
strcpy(dest, source); // dest의 크기가 충분한지 항상 확인해야 함
3.2 strncpy (길이 지정 복사 - 권장)
복사할 최대 길이를 지정하여 버퍼 오버플로우를 방지하는 안전한 대안입니다.
C
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Safe Programming";
char dest[10];
// 버퍼 크기보다 1 적게 복사하여 마지막에 널 문자가 들어갈 자리를 확보합니다.
strncpy(dest, src, sizeof(dest) - 1);
dest[sizeof(dest) - 1] = '\0'; // strncpy는 널 문자를 자동으로 붙이지 않을 수 있습니다.
printf("결과: %s\n", dest); // 출력: Safe Pro
return 0;
}
4. 함수 한눈에 비교하기
| 함수 | 주요 기능 | 핵심 주의사항 |
| strlen | 문자열 길이 측정 | NULL 포인터 전달 시 런타임 에러 발생 |
| strcpy | 문자열 전체 복사 | 대상 버퍼 크기 미체크 (보안 취약점 위험) |
| strncpy | 지정된 길이만큼 복사 | 마지막 널 문자(\0) 수동 추가 필수 |
5. 마무리: 안전한 문자열 처리를 위한 팁
- 배열 크기 확보: 복사 시에는 항상 (문자열 길이 + 1) 만큼의 공간이 있는지 확인하세요.
- strncpy 활용: 실무 환경에서는 보안을 위해 strcpy보다 strncpy 사용을 강력히 권장합니다.
- 동적 할당 주의: malloc으로 생성된 문자열을 다룰 때는 반드시 마지막 널 문자의 존재를 잊지 마세요.
C언어의 문자열 처리는 단순해 보이지만 메모리 관리의 기초가 담겨 있습니다. 오늘 배운 내용을 직접 코드로 구현해 보며 감을 익혀보시기 바랍니다!
포스팅이 도움이 되셨다면 하트(♥)와 댓글 부탁드립니다!
임베디드 소프트웨어 및 최적화 기법에 대한 전문적인 정보는 'Coding by Head' 블로그에서 계속됩니다.
반응형
'Core Programming > C Standard Library: Resource & Performan' 카테고리의 다른 글
| C언어 문자열 비교 완벽 가이드: strcmp와 strncmp 사용법 및 원리 (0) | 2025.02.11 |
|---|---|
| C언어 문자열 이어붙이기 완벽 가이드: strcat과 strncat의 안전한 사용법 (0) | 2025.02.10 |
| C언어 파일 입출력 에러 처리 완벽 가이드 (perror, feof, ferror, clearerr) (0) | 2025.02.08 |
| C언어 파일 포인터 위치 제어: fseek, ftell, rewind 완벽 가이드 (0) | 2025.02.07 |
| C언어 파일 입출력 마스터: fprintf와 fscanf로 데이터 저장 및 읽기 완벽 가이드 (0) | 2025.02.06 |