C언어/string.h

[C언어] memccpy 함수 (특정 문자까지만 메모리 복사)

아무일도없었다 2022. 9. 16. 11:36

사용범위

Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수

기능

C언어 표준 함수로 특정 문자까지의 데이터를 복사할때 사용한다.

헤더

#include <string.h>

※ memccpy 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※


함수

void* memccpy(void* dest, const void* src, int val, size_t size);

파라미터

  • void* dest
    • 복제된 데이터를 저장할 버퍼를 입력한다.
  • const void* src
    • dest 에 복제할 데이터 버퍼를 입력한다.
  • int val
    • 복제 도중 src 에서 발견하면 중단할 문자를 입력한다.
    • 문자 val 을 만나면 val 까지 복사하고 중단한다.
    • 예를 들어 'a' 같은 작은 따옴표를 사용한 문자 혹은 ascii 코드 97 로 입력해도 된다. ('a' = 97)
  • size_t size
    • 복제할 데이터의 크기를 byte 단위로 입력한다.

반환값 (return)

val 을 만나지 못하는 경우 : NULL 을 반환한다. ( 모든 데이터 복사 완료 )
val 을 만나서 복제가 중단된 경우 : 마지막으로 복사된 데이터주소 + 1 의 주소값을 반환한다. ( val 문자까지만 복사 )

 

 

<소스 코드 1>

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

int main() {
    char buffer1[32] = "I'm unknown function";
    char buffer2[32] = "I'm memccpy FUNCTION";
    char *ret;

    printf("(Before) %s\n", buffer1);

    // 'F' 문자를 만나면 'F' 까지만 복사하고 중단
    ret = memccpy(buffer1, buffer2, 'F', sizeof(buffer2));

    printf("(After) %s\n", buffer1);

    if(ret != NULL) {
        printf("Copy Stopped. ret[%s]\n", ret);
    } else {
        printf("All Data Copy Success !\n");
    }
    
    return 0;
}

 

※ 실행 결과 (소스 코드 1)

(Before) I'm unknown function
(After) I'm memccpy Function
Copy Stopped. ret[unction]

 


 

<소스 코드 2>

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

int main() {
    char buffer1[32] = "I'm unknown function";
    char buffer2[32] = "I'm memccpy FUNCTION";
    char *ret;

    printf("(Before) %s\n", buffer1);

    // '#' 문자를 만나면 '#' 까지만 복사하고 중단
    ret = memccpy(buffer1, buffer2, '#', sizeof(buffer2));

    printf("(After) %s\n", buffer1);

    if(ret != NULL) {
        printf("Copy Stopped. ret[%s]\n", ret);
    } else {
        printf("All Data Copy Success !\n");
    }
    
    return 0;
}

 

※ 실행 결과 (소스 코드 2)

(Before) I'm unknown function
(After) I'm memccpy FUNCTION
All Data Copy Success !

 

 

반응형