Programming Language/C,C++

C] memset, memcmp

TwinParadox 2017. 6. 4. 00:00
728x90



알고리즘 문제를 풀다보면, 새로운 값을 입력받을 때마다,

임시적으로 사용했던 데이터들을 모두 갈아 엎고,

메모리에 저장된 값을 특정한 값으로 일괄초기화를 해야 하는 경우가 생기는데,

그럴 때마다 골치가 아팠는데 이럴 때 사용하기 좋은 메모리 조작 함수가 있다.


memset, memcmp, memcpy, memmove는 string.h에 정의되어 있으며,

memory.h에도 정의되어 있는데 이 때 memmove는 정의되어 있지 않으니,

고민할 것 없이 string.h를 포함시키면 된다.




1. memset


함수 원형

 

1
void * memset(void * ptr, int value, size_t num);
cs


사용법

memset(메모리 블럭 첫번째 주소, 문자(문자 하나), 메모리 블럭 크기(byte))



활용

자료형이 int인 2차원 배열 cac을 모두 -1로 초기화하려고 할 때,

 

1
2
int cac[101][101];
memset(cac, -1sizeof(cac));
cs

 




2. memcmp


- memcmp의 경우 strcmp와 다른 점은 비교하는 범위를 설정할 수 있다는 것이다.

  strcmp는 문자열을 통째로 비교하고, memcmp는 비교할 범위를 지정할 수 있다.


함수 원형

 

1
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
cs


사용법

memcmp(비교할 첫번째 주소, 비교할 두번째 주소, 메모리 크기(byte))



활용

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
int main ()
{
  char buffer1[] = "DWgaOtP12df0";
  char buffer2[] = "DWGAOTP12DF0";
 
  int n;
 
  n=memcmp ( buffer1, buffer2, sizeof(buffer1) );
 
  if (n>0printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);
  else if (n<0printf ("'%s' is less than '%s'.\n",buffer1,buffer2);
  else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);
 
  return 0;
}
cs

 

728x90