컴퓨터 프로그래밍/C

C언어 문자열 처리 함수(strlen() :문자열 길이)

나노콛 2019. 7. 23. 11:32

strlen() 문자열 길이 확인하는 함수

#include <stdio.h>
#include <string.h>

int main()
{
	char* string = "Hello";
	int nLen = 0;

	nLen = strlen(string);
	
	printf("string = %s \n", string);
	printf("nLen = %d \n", nLen);

	return 0;
}

strlen() 함수의 인자로는 문자열 주소가 들어갑니다.
" "로 되어있는 것들을 문자열로 판단하는데요
문자열은 메모리에 문자열의 첫 번째 자리의 주솟값을 가지고 있습니다.
문자열 주소가 인자로 들어간다는 말은

문자열 배열이 될 수도 있고
포인터가 될 수도 있고
문자열 그 자체가 될 수도 있습니다.

 

// strlen() 인자 case //
char * string="hello";
char string1[] = { "hello" };
1. strlen(string); //포인터는 주소
2. strlen(string1); //배열이름은 문자의 시작주소
3. strlen("hello"); //문자열은 첫번째 자리의 시작주소

strlen() 함수 직접 구현해보기

알아봐야 할 것
1. 이 함수의 리턴 타입은?
2. 이 함수의 인자는 어떤 형태?

 

이 함수의 리턴 타입은 unsigned int형입니다.
(개수를 센다는) 기능을 살펴봤을 때 음수가 될 일은 없으까요

인자는 위에서 살펴봤듯이 문자열 주솟값이 들어갑니다.

그러면 기본 함수 형태는

unsigned int MyStrlen(char * string)
{

}

이렇게 된다고 생각해 볼 수 있겠네요

문자열 주소를 받아서 그 값에 들어가 있는 문자를 세어주면 될 것 같은데
이 문제는 
배열/포인터 연산을 알고 있어야 합니다.

 

int MyStrlen(char * string)
{
    int i=0;
    while(*string)  //string의 *역참조 연산자로 값을 확인하는데
    {               // null문자가 오면 거짓이된다. 결국 널문자 까지 반복
     string++; // 포인터 주소를 증가한다(자료형 크기만큼)
     i++;     //문자가 있으면 1씩 증가
    }

return i;
}