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을 다루기 적합한 함수이다. 다른 곳에 이용하면 복잡해지거나 가독성을 해칠 수도 있다. 단순 메모리 초기화 용도라면 상관은 없지만 문자열을 다룰 때 사용하는 것이 더 적합하다.
'Programming > C C++' 카테고리의 다른 글
C/C++ 메모리 복사 memcpy 함수 (0) | 2021.07.16 |
---|---|
Segmentation Fault 세그멘테이션 오류 (Core dump) (0) | 2021.07.05 |
스레드와 C언어 스레드 pthread (0) | 2021.06.19 |
C++ STL map 컨테이너 (2) | 2021.06.09 |
C++ STL Set 컨테이너,멤버 함수 사용 (2) | 2021.06.05 |
댓글