반응형

안녕하세요.

오늘은 C언어에서 문자열의 길이를 알아내는 함수인 strlen 함수에 대해 알아보도록 하겠습니다.

 

strlen

함수 원형
size_t strcat(const char *_Str);

헤더 파일
string.h

리턴값
_Str문자열의 길이가 리턴됩니다.

설명
문자열의 길이가 리턴됩니다.
문자열의 크기로 혼동될 수 있는데, 길이 입니다.
문자열의 데이터 중 '\0'값 이전값까지 문자열 길이를 리턴합니다.

예제

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <string.h>
 
void main()
{
    char arrString1[10= "Hello";
    char arrString2[10= "Worl\0d!!";
    
    printf("arrString1 len : %d\n", strlen(arrString1));
    printf("arrString2 len : %d\n", strlen(arrString2));
}
 
cs

 

 

 

strlen는 해당 문자열의 크기가 아니라 길이를 리턴합니다.

arrString1[10]은 크기가 10이지만 길이는 "Hello"이렇게 5문자가 됩니다.

간혹 혼란이 많이 생기는 부분입니다.

참고로 문자열 배열의 크기를 알아내는 함수는 sizeof()입니다.

 

arrString2 문자열의 경우에는 "worl\0d!!\0"을 데이터로 갖고 있습니다.

strlen함수를 이용하여 길이를 확인하면 4가 리턴됩니다.

함수자체내에서 문자를 하나씩 '\0'(NULL)값을 체크하면서 카운트를 한 후

'\0'일 경우에는 해당 카운트를 리턴해주는 것으로 보입니다.

 

strlen 응용

 strcat함수와 같이 응용하는 코드를 한번 만들어보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define _CRT_SECURE_NO_WARNINGS        // vs2017 이후 버전은 strcat함수 실행시 보안 에러발생으로 인해 추가합니다.
#include <stdio.h>
#include <string.h>
 
void main()
{
    char arrString1[20= "Hello";
    char arrString2[20= "";
 
    scanf("%s", arrString2);
    while (getchar() != '\n');
 
    int nLength = strlen(arrString1) + strlen(arrString2) ;
 
    if (sizeof(arrString1) > nLength)
    {
        strcat(arrString1, arrString2);
        printf("arrString1 : %s\n", arrString1);
    }
    else
    {
        printf("Error over size \n");
    }
}
cs

"12345678901234" 입력 시 다음과 같이 출력이 됩니다.

arrString1을 크기가 20으로 되어있어서, "Hello"(5)와 "12345678901234"(14)를 합치더라도 크기가 넘치지 않습니다.

다음 "123456789012345" 입력 시에는 다음과 같이 출력되게 됩니다.

"Hello"(5)와 "123456789012345"(15)이므로 '\0'까지 포함하게되면 크기가 넘치므로,

else문의 "Error over size"를 호출하게 됩니다.

반응형

+ Recent posts