libc 문자열 조작 함수 정리
C 언어에서 문자열 처리는 복잡하다. 언어 수준에서 문자열이라는 데이터 형 자체를 지원하지도 않으니, 덧셈 기호(+)나 비교연산자(==)와 같은 기호를 사용하는 직관적인 문자열 연산을 사용할 수 없기 때문이다. C 언어가 문자열 데이터 형을 지원하지 않고, 문자열을 다루는 연산자도 없으니 모든 문자열 연산은 문자열 함수를 통해 이루어진다. C 표준 라이브러리(일명 'libc')에서 str...
로 시작하는 함수들이 그것이며, 모두 string.h
헤더(C++은 cstring
헤더)에 정의되어 있으며 본 시리즈를 통해 이들 함수의 사용법을 정리해보고자 한다. 본 시리즈는 cplusplus(http://www.cplusplus.com) 및 MSDN에 나와있는 레퍼런스를 기준으로 하여 작성되었다.
- libc 문자열 조작 함수 정리 (part 01 - strcpy, strncpy)
- libc 문자열 조작 함수 정리 (part 02 - strcat, strncat)
- libc 문자열 조작 함수 정리 (part 03 - strcmp, strncmp)
- libc 문자열 조작 함수 정리 (part 04 - strchr, strrchr)
- libc 문자열 조작 함수 정리 (part 05 - strstr)
- libc 문자열 조작 함수 정리 (part 06 - strtok)
- libc 문자열 조작 함수 정리 (part 07 - strspn, strcspn)
- libc 문자열 조작 함수 정리 (part 08 - strlen)
- libc 문자열 조작 함수 정리 (part 09 - strpbrk)
- libc 문자열 조작 함수 정리 (part 10 - strxfrm, strcoll)
- libc 문자열 조작 함수 정리 (part 11 - strerror)
Part IIX. strlen
본 포스팅에서는 문자열의 길이length을 구하는 함수인 strlen
함수에 대해 정리한다.
<Prologue>
strlen
은 C 스타일 문자열(맨 끝에 NULL ('\0')
이 붙는 문자열)의 길이를 구하는 함수이다. 즉 NULL ('\0')
문자 직전의 문자까지만 센다. 예를 들어, 문자열 "Hello" = {'H', 'e', 'l', 'l', 'o', '\0'}
의 경우 NULL ('\0')
문자를 제외한 5글자('H', 'e', 'l', 'l', 'o'
)만을 센다.
1. strlen
strlen
의 원형은 다음과 같다.
size_t strlen(const char * str);
NULL
문자를 만날때까지 문자를 하나씩 센다. 함수가 종료될 때 이 문자 수를 반환한다. 이 때 문자열 버퍼를 구성하는 NULL
문자는 개수에 포함되지 않는다. 메모리를 할당할 때 이를 고려하여 버퍼의 크기를 1개 문자 더 많게 설정해야 할 것이다.
다음은 strlen
으로 문자열 버퍼에서 문자의 수를 세는 예시이다.
/* strlen.c */
#include <stdio.h>
#include <string.h>
int main(int argc, char * argv[])
{
char str[64] = "Hello, World!";
size_t length = 0;
length = strlen(str);
printf("original text: \"%s\" (%zu characters).\n", str, length);
return 0;
}
2-1. Wide Character 확장 함수 - wcslen
상기 strlen
는 ASCII 문자열 또는 UTF-8 인코딩의 Unicode 문자열에 대해 사용 가능하다. UTF-16/UTF-32와 같은 Wide Character 문자열의 경우 아래의 함수를 사용 가능하며, wchar.h
, C++에서는 cwchar
헤더를 include
한다.
size_t wcslen(const wchar_t * wcs);
<Epilogue>
본 포스팅을 통해 문자열 복사 함수에 대해 정리해 보았다. 다음 포스팅[libc 문자열 조작 함수 정리 (part 09 - strpbrk)]에서는 특정 문자의 위치를 반환하는 함수인 strpbrk
에 대해 정리한다.