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

  1. Argument Passing – 문자열의 베이스 주소가 함수에 전달됩니다.
  2. Counter Initializationcnt0으로 초기화하고 문자 수를 셉니다.
  3. Loop Conditionstr[cnt]가 널 문자 '\0'가 아닐 때까지 반복합니다.
  4. Pointer Arithmeticstr[cnt]를 사용하지만, 컴파일러는 이를 포인터 연산(*(str + cnt))으로 처리합니다.
  5. Incrementing the Counter – 각 반복마다 다음 문자로 이동하고 cnt를 증가시킵니다.
  6. Loop Terminationstr[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에서 문자열을 순회하는 방법.
Back to Blog

관련 글

더 보기 »