본문 바로가기
C/[코드조선] C 핵심

[C] strlen()

by 묻공러 2024. 2. 9.

strlen() vs. strnlen() vs. strnlen_s()

- strlen()
strlen 함수는 null 종단 문자('\0')가 나타나기 전까지의 문자열 길이를 측정한다
하지만 null 종단 문자 이후의 메모리를 읽기 시작할 경우, undefined behaviour를 초래할 수 있다

 

- strnlen()
strnlen 함수는 첫 번째 매개변수로 전달된 문자열에서 최대한으로 지정된 길이까지만 검사한다
null 종단 문자 이전에 지정된 최대 길이에 도달하면 검사를 중단하고 그때까지의 길이를 반환한다
strnlen은 C99 표준에서 도입되었고 많은 C 라이브러리에서 사용 가능하다

 

- strnlen_s()
strnlen_s는 C11 표준에서 도입된 안전한 함수로 strnlen의 개선버전이다
추가적인 보안 검사를 수행하여 최대 길이가 벗어나면 실행 중에 런타임 에러를 발생시켜 가장 안전하며 추천된다

 

 

strlen() 구현

#include <stdio.h>

int my_strlen(const char* str);

int main(void)
{
    char string[] = "I got a feeling!";
    int length;

    length = my_strlen(string);

    printf("length: %d", length);

    return 0;
}

int my_strlen(const char* str)
{
    int i;

    for (i = 0; *str++ != '\0'; ++i) {}

    return i;
}

'C > [코드조선] C 핵심' 카테고리의 다른 글

[C] strcpy()  (0) 2024.02.09
[C] strcmp()  (1) 2024.02.09
[C] 포인터  (0) 2024.02.08
[C] 재귀 함수 (Resurcive Function)  (1) 2024.02.07
[C] 변수의 종류  (0) 2024.02.07