C에서 처음부터 직접 구현하여 strlen() 내부 구조 이해하기
발행: (2026년 2월 6일 오후 04:04 GMT+9)
3 min read
원문: Dev.to
Source: Dev.to
Introduction
strlen()은 주어진 문자열의 길이를 구하는 미리 정의된 함수입니다.
Syntax
size_t strlen(const char *str);
Example
char str[6] = "hello";
size_t len = strlen(str); // len = 5
What Is a String in C?
C에서 문자열은 별도의 데이터 타입이 아닙니다. 널 문자('\0')로 끝나는 문자 배열입니다. 널 문자는 문자열의 끝을 나타냅니다.
Header File
strlen()은 <string.h> 헤더 파일에 선언되어 있으며, 여기에는 많은 표준 라이브러리 함수 선언이 포함되어 있습니다.
Implementing strlen() from Scratch
Prototype
int my_strlen(const char *str);
const char *str– 문자열의 첫 번째 문자에 대한 포인터(베이스 주소).const는 함수 내부에서 문자열이 수정되는 것을 방지하여 버그를 피하게 해 줍니다.
Implementation
int my_strlen(const char *str)
{
int cnt = 0;
while (str[cnt] != '\0')
{
cnt++;
}
return cnt;
}
How It Works – Step by Step
- Argument Passing – 문자열의 베이스 주소가 함수에 전달됩니다.
- Counter Initialization –
cnt를0으로 초기화하고 문자 수를 셉니다. - Loop Condition –
str[cnt]가 널 문자'\0'가 아닐 때까지 반복합니다. - Pointer Arithmetic –
str[cnt]를 사용하지만, 컴파일러는 이를 포인터 연산(*(str + cnt))으로 처리합니다. - Incrementing the Counter – 각 반복마다 다음 문자로 이동하고
cnt를 증가시킵니다. - Loop Termination –
str[cnt]가'\0'와 같아지면 조건이 거짓이 되어 루프가 종료되고,cnt는 널 종료자를 제외한 문자열 길이를 갖게 됩니다.
Memory Representation
+---+---+---+---+---+---+
| h | e | l | l | o | \0|
+---+---+---+---+---+---+
^ ^
| |
base address null terminator
Why It Returns the Length of the String
- 널 종료자 이전의 모든 문자를 셉니다.
- 널 문자 자체는 카운트되지 않습니다.
- 문자열 끝에서 정확히 셈을 멈추어 실제 길이를 반환합니다.
Final Understanding
strlen()을 직접 구현해 보면 다음을 알 수 있습니다:
- 문자열이 메모리에서
'\0'로 끝나는 문자들의 연속으로 저장된다는 점. - 문자열의 끝을 표시하는 널 문자의 중요성.
- 포인터 연산과 간단한 루프를 이용해 C에서 문자열을 순회하는 방법.