728x90
반응형
C 언어에서 문자열 처리는 표준 라이브러리 <string.h>
를 통해 제공됩니다. string.h
는 문자열을 다루는 다양한 함수들을 포함하고 있으며, 이를 활용하면 문자열의 길이를 측정하거나 복사하는 등의 작업을 쉽게 수행할 수 있습니다.
이번 포스팅에서는 string.h
의 개요와 함께 문자열 관련 주요 함수 중 strlen
, strcpy
, strncpy
에 대해 살펴보겠습니다.
1. <string.h>
개요
<string.h>
는 문자열과 관련된 다양한 함수를 포함하고 있는 헤더 파일입니다. 이 헤더 파일에 정의된 함수들은 다음과 같은 작업을 수행할 수 있습니다.
- 문자열 길이 측정 (
strlen
) - 문자열 복사 (
strcpy
,strncpy
) - 문자열 연결 (
strcat
,strncat
) - 문자열 비교 (
strcmp
,strncmp
) - 특정 문자 찾기 (
strchr
,strrchr
) - 문자열 검색 (
strstr
) - 문자열 분할 (
strtok
)
그럼 이제 문자열의 길이를 측정하는 strlen
과 문자열을 복사하는 strcpy
, strncpy
에 대해 구체적으로 알아보겠습니다.
2. strlen
함수 (문자열 길이 측정)
2.1 strlen
함수 개요
strlen
함수는 문자열의 길이를 반환하는 함수입니다. 단, 문자열의 끝을 나타내는 \0
(널 문자)은 포함하지 않습니다.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
size_t length = strlen(str);
printf("문자열 길이: %zu\n", length);
return 0;
}
2.2 실행 결과
문자열 길이: 13
2.3 주의사항
strlen
은NULL
포인터에 대해 동작하지 않습니다.strlen
함수는O(n)
의 시간 복잡도를 가집니다.- 문자열 끝(
\0
)을 포함하지 않고 길이를 계산합니다.
3. strcpy
함수 (문자열 복사)
3.1 strcpy
함수 개요
strcpy
함수는 한 문자열을 다른 문자열로 복사하는 함수입니다.
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello, C!";
char destination[20];
strcpy(destination, source);
printf("복사된 문자열: %s\n", destination);
return 0;
}
3.2 실행 결과
복사된 문자열: Hello, C!
3.3 주의사항
destination
크기가 충분히 크지 않으면 버퍼 오버플로우가 발생할 수 있습니다.strcpy
는 널 문자를 포함하여 복사하므로,destination
은 반드시 충분한 공간을 가져야 합니다.
4. strncpy
함수 (지정된 길이만큼 문자열 복사)
4.1 strncpy
함수 개요
strncpy
함수는 strcpy
와 유사하지만, 최대 n
개의 문자만 복사할 수 있는 안전한 함수입니다.
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello, C programming!";
char destination[10];
strncpy(destination, source, sizeof(destination) - 1);
destination[sizeof(destination) - 1] = '\0'; // 널 문자 추가
printf("복사된 문자열: %s\n", destination);
return 0;
}
4.2 실행 결과
복사된 문자열: Hello, C
4.3 주의사항
strncpy
는 널(\0
) 문자를 자동으로 추가하지 않기 때문에 직접destination[n-1] = '\0';
처리가 필요할 수 있습니다.strncpy
는 남은 공간을 자동으로\0
로 채우지 않으므로, 필요 시 수동으로 초기화해야 합니다.
5. 정리
함수 | 기능 | 주의할 점 |
---|---|---|
strlen |
문자열의 길이를 구함 | \0 을 포함하지 않음, NULL 포인터 처리 불가 |
strcpy |
문자열을 복사 | 버퍼 오버플로우 위험 |
strncpy |
지정된 길이만큼 문자열을 복사 | \0 자동 추가되지 않음 |
string.h
를 활용하면 문자열을 다룰 때 매우 편리하지만, 메모리 관리를 신중하게 해야 합니다. 특히 strcpy
와 같은 함수는 버퍼 오버플로우의 위험이 있기 때문에 항상 충분한 공간을 확보하고 strncpy
와 같은 안전한 대안을 고려해야 합니다.
반응형
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C 언어 `string.h`의 `strcat`과 `strncat` 함수 이해하기 (0) | 2025.02.10 |
---|---|
파일 에러 처리 함수(perror, clearerr, feof, ferror) - C 언어 (0) | 2025.02.08 |
C 언어 파일 포인터와 위치 조정 - fseek, ftell, rewind (0) | 2025.02.07 |
C언어 표준 입출력 (stdio.h) - fprintf와 fscanf 사용법 (0) | 2025.02.06 |
C 언어 표준 API - stdio.h의 파일 입출력 (fopen, fclose, fread, fwrite) (0) | 2025.02.05 |