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() (0) | 2024.02.09 |
[C] 포인터 (0) | 2024.02.08 |
[C] 재귀 함수 (Resurcive Function) (0) | 2024.02.07 |
[C] 변수의 종류 (0) | 2024.02.07 |