70. 문자열 길이와 strlen함수

C 컴파일러에서는 문자열 데이터에 관한 여러가지 함수를 제공하고 있어요.
이러한 함수들을 사용하려면 string.h 파일을 포함하세요.

#include <string.h>

strlen 함수는 문자열 길이를 구하는 함수예요.

size_t strlen(const char *str);

입력 인자로 문자열을 const char * 형식 변수로 받고 문자열 길이를 size_t 형식으로 반환해요.
const char * 형식으로 받는 이유는 전달받은 문자열의 내용을 바꾸지 않겠다는 의미예요.
그리고 반환 형식인 size_t 형식은 부호없는 정수형으로 unsigned int 와 같은 표현이예요.
실제 헤더 파일에는 다음처럼 size_t를 typedef 문으로 정의하고 있어요.
typedef unsigned int size_t;
◈ strlen 함수 사용 예

#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 50
int main()
{
    char name[MAX_NAME_LEN+1] = "hello";
    printf("%s 길이: %d\n",name, strlen(name));
    return 0;
}

◈ 실행 결과

hello 길이: 5

주의할 점은 한글은 ASCII 코드가 아니어서 한글 한 글자가 ASCII 코드 두 개의 글자로 취급해요.
C99 표준 이후에는 유니 코드를 취급할 수 있는 wchar_t 형식을 제공하고 있어요.
wchar_t 형식을 사용하면 개발자의 지역에서 사용하는 언어의 문자를 하나의 문자로 취급하죠.

wchar_t 형식을 표현할 때는 L’홍’처럼 대문자 L을 앞에 붙여서 사용하세요.
wchar_t 형식 문자열을 표현할 때는 L”홍길동”처럼 사용하죠.

그리고 locale.h 파일에서 제공하는 setlocale함수를 사용하면 printf 함수로 출력할 수 있어요.
setlocale(LC_ALL,”Korean”); 으로 지정하고 printf 함수에 %lc 와 %ls 포멧을 사용해서 출력하세요.

◈ 유니코드와 ASCII 코드

#include <locale.h>
#include <stdio.h>
#include <string.h>
int main()
{
    char c ='a';
    wchar_t wc = L'홍';
    char name[10]="홍길동";
    wchar_t wname[10]=L"홍길동";    
    setlocale(LC_ALL,"Korean"); //로케일 설정(지역 설정)
    printf("c:%c wc:%lc\n",c,wc);
    printf("name:%s wname:%ls\n",name,wname);    
    printf("name 길이:%d wname 길이:%d\n",strlen(name), wcslen(wname));
    return 0;
}

◈ 실행 결과

c:a wc:홍
name:홍길동 wname:홍길동
name 길이:6 wname 길이:3