본문으로 바로가기
728x90
반응형
memcpy 함수의 헤더 파일
#include <string.h>

 

memcpy() 함수의 원형
void * memchr(const void * ptr, int value, size_t num);

 

Parameter
ptr
검색하고자하는 메모리 블럭의 주소를 나타내고 void * 형으로 변환되어서 전달된다.

value
찾고자하는 문자를 나타내고 int형이지만 unsigned char 문자로 이해하면 된다.
(1 byte씩 비교하기 때문에 문자비교)

num
num 사이즈만큼의 문자열에서 value 값을 찾아낸다.

 

리턴값
value 를 찾았을 경우 value의 주소를 리턴
value 를 못 찾았을 경우 NULL을 리턴 

 

코딩을 하다보면 문자열 탐색 함수를 많이 사용하는데 그 중 memchr() 함수를 알아보죠!!

memchr() 함수는 문자열 탐색 함수 중에 하나예요.

이름처럼 memory(문자열)에서 char(문자)를 찾는다라고 해석하고 이해하시면 좋겠네요.

 

Θ memchr() 함수는 어떻게 동작하는 걸까요?

 

만약 HELLO WORLD 문자열에서 L문자를 찾는다면 어떻게 될까요?

 

str값인 HELLO WORLD와 int형으로 입력된 value 값을 순차적으로 비교해 값이 같으면 해당 주소를 리턴할 꺼예요.

str parameter는 void * 형으로 오니 주소 값을 indexing 하면서 value 값을 비교하는 건 쉽겠죠??

 

 

 

 

NOTE, int형인 value 값과 str 문자열을 어떻게 비교하죠??

이전 strcnmp() 포스팅에 자세히 적어놓긴 했지만 다시 한번 설명할께요.

문자열은 여러 문자로 되어 있는 집합이예요.
하나의 문자들이 모여서 문자열을 이루고 있어요.
하지만 컴퓨터는 0 과 1만 알기 때문에 문자도 모두 숫자로 기억해요.
이를 문자인코딩이라고 하는데 문자 인코딩 방식에는 여러가지 방법이 있어요.

c언어에서 사용하는 문자들은 ASCII으로 인코딩되어 있어요.
그렇기 때문에 int형 value 를 넣어도 str 문자열과 비교를 할 수 있어요.

 

 

자세한 내용이 궁금하면 아래 포스팅으로!!

 

[C언어] String.h 라이브러리 함수 - strcnmp() 함수 파헤치기(문자열 비교, 같은 문자열 찾기)

strcmp() 함수의 헤더 파일 #include strcmp() 함수의 원형 int strncmp ( const char * str1, const char * str2, size_t num); Parameter str1 비교할 첫 번째 메모리 블록의 주소를 인자로 받으며 const char *..

idsn.tistory.com

 

 

자 그럼 예제를 한번 볼까요?

 

str 문자열 "hello world" 에서 'l' 문자를 찾아보죠!!

('l' 문자는 ASCII으로 0x6C value에 0x6C를 넣는거랑 같아요!)

 

또 심화로 str 문자열 "hello world" 에서 'l' 문자가 몇개 있는지 찾아보죠!

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

int main(){
  char str[] = "hello world!!"; // hello world!! 문자열
  int count = 0;

  char * ptr = (char *)memchr(str, 'l', strlen(str)); // str 문자열에서 'l' 문자를 찾아보죠!

  //'l' 문자가 str 문자열에 있으면 특정 주소가 0xXXXXXX
  //'l' 문자가 str 문자열에 없으면 NULL을!!
  if(ptr != NULL)
  {
    printf("return ch : %c\n", *ptr);
    printf("ch position : %d\n", (int)(ptr - str + 1));
  }

  //포인터 위치를 문자열의 처음으로! 초기화
  ptr = str;

  //반복하면서 'l'문자가 str 문자열에 몇개 있는지 확인!!
  while(1){
    ptr = (char *)memchr(ptr, 'l', strlen(ptr));
    if(ptr != NULL) count++;
    else break;
    printf("left... : %s\n", ptr);
    ptr++;
  }

  printf("total '%c' count : %d\n", 'l', count);


  return 0;
}

 

실행 결과

 

code가 필요하시면 github.com/Crisp-GG/blog

 

Crisp-GG/blog

Contribute to Crisp-GG/blog development by creating an account on GitHub.

github.com

 

 

다른 string.h 파일의 함수에 대해 알고 싶으시다면 String.h 함수 파헤치기!!

 

[C언어] String.h 헤더 파일 분석하기(String.h 함수 모음, C언어 래퍼런스)

c언어를 사용하시거나 해보셨던 분들은 대부분 memcpy, memset 함수를 사용해보셨을 텐데요. 해당 함수를 사용하기 위해서는 String.h 파일을 포함시켜줬던 기억이 나실겁니다. 요렇게요 #include #include

idsn.tistory.com

 

반응형