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 |
---|