본문 바로가기

프로그래밍/C

memset() 함수

void  *memset(  void  *dest,  int  c,  size_t  count  );  

대략적인 사용법은 아래와 같다.

 

char a[10]이 있고, c의 각 원소를 0으로 초기화 해주려면

 

memset(a, 0, 10); 
// 또는  memset(a, 0, sizeof(a)); 

 

여기에 두번째 원소에 어떠한 정수를 넣어주냐에 따라 초기화되는 값이 바뀌는 것이다.

그런데 여기서 주의할 점은 무조건 1바이트씩 초기화한다는 것이다.

이것이 무슨 말이냐면,,

char a[10]의 경우에는 아무런 문제도 찾을 수 없다.

하지만 int a[10]의 경우에는 말이 다르다.

memset(a, 0, 10);  하게 되면 문제를 못 느낄지도 모른다.

 

하지만, memset(a, 1, 10);을 하는 순간 경악을 하게 될 지도 모른다.

우리는 a의 각 원소를 1로 초기화하기를 바랬다.

하지만 결과는 각 원소가 16843009로 초기화 되었음을 알 수 있다.

 

왜 그럴까??

 

앞에서 이미 말했듯이 memset은 초기화를 할 때 1바이트씩한다고 했다.

그런데 int의 경우에는 32비트 머신에서 4바이트를 차지하게 된다.

그러면 여기서 하나의 int를 16진수로 뜯어서 memset하게 된 결과를 보면,

16진수 01010101 이 되고,  이는 10진수로 계산하면 16843009가 되는 것이다.

'프로그래밍 > C' 카테고리의 다른 글

포인터(Pointer)와 함수  (0) 2010.01.04