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 문자열과 비교를 할 수 있어요.
자 그럼 예제를 한번 볼까요?
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
다른 string.h 파일의 함수에 대해 알고 싶으시다면 String.h 함수 파헤치기!!
반응형
'C 언어 > C 언어 리이브러리 함수' 카테고리의 다른 글
[C언어] String.h 라이브러리 함수 - strxfrm() 함수 파헤치기(문자열 복사, 문자열 길이 구하기) (0) | 2021.04.01 |
---|---|
[C언어] String.h 라이브러리 함수 - strcnmp() 함수 파헤치기(문자열 비교, 같은 문자열 찾기) (0) | 2021.03.25 |
[C언어] String.h 라이브러리 함수 - strcoll() 함수 파헤치기(문자열 비교, 같은 문자열 찾기) (0) | 2021.03.17 |
[C언어] String.h 라이브러리 함수 - strcmp() 함수 파헤치기(문자열을 비교, 같은 문자열 찾기) (0) | 2021.02.14 |
[C언어] String.h 라이브러리 함수 - memcmp() 함수 파헤치기(문자열을 비교해보자, 같은 문자열 찾기) (0) | 2021.02.09 |