본문 바로가기
Programming/C C++

C/C++ memset() 함수

by whitele 2021. 7. 11.
반응형

 

memset함수?

 memset 함수는 메모리의 시작점부터 지정한 범위를 특정한 문자로 지정하는 함수이다. 함수 뜻 그대로 memory set이다.

 

 

기본 함수 및 인자

void* memset(void* str, int value, size_t size);

str : 설정하려는 문자열의 시작 주소

value: 초기화하려는 값, unsigned char로 변환하기 때문에 문자

size : 변환할 만큼의 길이, 자료형의 배수로 입력하고 배수만큼 초기화된다.

 헤더 파일은 <string.h>에 선언되어 있으며 <memory.h>에도 정의되어있다. C++에서는 <cstring>을 사용한다.

 

 

memset함수 사용

 memset함수는 할당된 특정 메모리 공간을 특정한 값으로 초기화하거나 어떠한 문자열을 특정 값으로 초기화하기 위해 사용된다. memset()은 성공 시 첫 번째 인자를 반환하며 실패 시 NULL을 반환한다. for 문을 이용하여 작성하는 것보다 훨씬 간결하고 가독성이 좋다. 헤더 파일은 보다시피 문자열을 다루기 위한 함수이다.

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

int main(){
	char str[20]="hello, world";
	printf("\n%s\n",str);
	
	memset(str,'0',12*sizeof(char));
	
	printf("\n\n%s\n\n",str);
	
	return 0;
}

 

 

memset 사용 시 주의점

memset은 앞서 말했다시피 내부에서는 unsigned char 형태로 동작한다. int 형 자료형을 넣으면 전혀 다른 값이 출력된다. 다음 예로 int 형 1을 value 값으로 넣었을 경우 코드와 그 실행 예이다.

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

int main(){
	int ls[20];
	
	memset(ls,1,20*sizeof(int));
	for(int i=0;i<20;i++)
		printf("%d\n",ls[i]);
	
	return 0;
}

int 각 (4byte)마다 16843009가 들어간 것을 볼 수 있다.  

 위와 같이 1byte마다 1이 입력되었으며 이를 출력할 때 0000 0001 0000 0001 0000 0001 0000 0001을 출력하기 때문에 결괏값으로 16843009가 출력된 것이다. 이를 총길이 위에 코드처럼 20*sizeof(int)를 수행했기 때문에 16843009가 총 20번 출력되었다.

 

 

 

 

 

memset은 string을 다루기 적합한 함수이다. 다른 곳에 이용하면 복잡해지거나 가독성을 해칠 수도 있다. 단순 메모리 초기화 용도라면 상관은 없지만 문자열을 다룰 때 사용하는 것이 더 적합하다.

728x90
반응형

댓글