memset
함수 원형
//c header
#include <string.h>
void* memset(void* dest, int value, size_t size);
함수 설명
dest
의 주소부터 size
바이트를 value
값으로 채운다.
이 때, value
는 unsigned char 로 형변환된다.
→ 따라서 int값으로 초기화는 불가능하다!
int main(void)
{
int memset_with_0[5];
int memset_with_1[5];
memset(memset_with_0, 0, sizeof(memset_with_0));
memset(memset_with_1, 1, sizeof(memset_with_1));
//memset_with_0 출력
printf("memset_with_0 : ");
for (int i = 0; i < 5; i++)
printf("%d ", *(memset_with_0 + i));
//memset_with_1 출력
printf("\\\\nmemset_with_1 : ");
for (int i = 0; i < 5; i++)
printf("%d ", *(memset_with_1 + i));
return 0;
}
위와 같이 두 배열을 0과 1로 초기화 한다면
0 0 0 0 0
16843009 16843009 16843009 16843009 16843009
위와 같이 출력이 된다. 결과에서 보이듯이 1로 초기화 하고 싶었지만 기대한 결과값이 나오지 않는다!
이유는 memset 함수는 1바이트 단위로 값을 초기화 하기 때문이다! 따라서 모든 값을 0으로 초기화하거나 char값으로 초기화 할 때 사용하면 된다.
2진수로 표현된 값을 확인해보면 위의 그림과 같이 $16483009$의 값을 가진채로 int 배열이 초기화 되는 것이다. 이를 염두해 두고 memset은 바이트 단위의 초기화를 수행하기 때문에 char 형태의 배열에 용의한 것이고, 따라서 string.h에 들어있는 함수인 것도 이 이유 때문임을 유추할 수 있다.
bzero
함수 원형
//c header
#include <string.h>
void bzero(void* dest, size_t size);
함수 설명
memset과 같은 역할을 한다.
C언어 비표준이며 deprecated 된 함수이므로 사용하지 말자.
→ deprecated 함수란?
Return Value
없음
memcpy
함수 원형
//c header
#include <string.h>
void* memcpy(void* dest, const void* src, size_t size);
함수 설명
src
가 가리키는 곳 부터 size
바이트만큼 dest
에 복사한다.Return Value
dest
를 리턴한다.memccpy
함수 원형
//c header
#include <string.h>
void* memccpy(void* dest, const void* src, int ch, size_t size);
함수 설명
src
가 가리키는 곳 부터 size
바이트만큼 dest
에 복사한다.src
에서 문자 ch
를 만나면 ch까지만 복사를 진행하고 복제를 중단한다.Return Value
dest
변수에서 복사가 끝난 다음 주소를 리턴한다.ch
를 만나지 않았다면, size
바이트를 복사하고 NULL을 리턴한다.memmove
함수 원형
//c header
#include <string.h>
void* memmove(void* dest, const void* src, size_t size);
함수 설명
src
가 가리키는 곳 부터 size
바이트 만큼 dest
가 가리키는 곳으로 옮긴다.dest
와 src
가 겹쳐도 문제 없다.Return Value
dest
를 리턴한다.memchr
함수 원형
//c header
#include <string.h>
void* memchr(const void* dest, int ch, size_t size);
함수 설명
dest
가 가리키는 곳 부터 size
바이트 까지 중 처음으로 ch
와 일치하는 값을 찾는다.ch
는 unsigned char로 해석된다.Return Value
ch
를 만났다면 해당 주소를 리턴한다.ch
를 만나지 않았다면, size
바이트를 복사하고 NULL을 리턴한다.