728x90
배열의 형태를 사용하는 버퍼 구조에서는 c언어의 memset함수가 많이 사용됩니다.
특히 서버 프로그램을 c언어로 구성하는 경우에 정말 많이 만나게 되는데
memset함수가 어떻게 사용되는지에 대해 정리해보도록 하겠습니다.
먼저 memset 함수는 변수(배열)의 내용을 세팅하는데 메모리 자체에서
선택하는 크기만큼을 원하는 값으로 설정 할 수 있는 함수입니다.
void* memset(void* ptr, int value, size_t num);
함수에 들어가는 인자는 3가지로 먼저 첫번째 인자 ptr은
세팅하고자 하는 메모리 블록의 첫번째 시작 주소입니다.
두 번째 인자인 value는 메모리에 넣어줄 값을 의미합니다.
대부분은 memset함수 자체가 0x00으로 초기화할 때 많이 사용되기 때문에
value에는 0x00을 넣어주지만 특수한 경우에는 원하는 값을 넣어주면 됩니다.
마지막으로 num은 세팅하고자 하는 메모리의 크기를 가리킵니다.
즉 메모리의 시작번지부터 해서 얼마의 크기의 메모리를 세팅할 것인지 입력합니다.
int main(void){
char ar[] = "hello cordinghero";
memset(ar,0x00,sizeof(ar));
return 0;
}
해당 함수는 메모리를 직접적으로 관여하기 때문에 임베디드 시스템같이
규모가 작은 칩을 사용하는 시스템에서는 어떠한 문제를 일으킬지 모릅니다.
실제로도 8bit 마이컴의 작은 시스템에서 memset함수와 memcpy함수를 병행해서
사용하다가 배열간의 메모리 공간을 침범하는 문제도 있었습니다.
그렇기 때문에 시스템 규모가 작다면 반드시 사전에 해당 함수가 이상이 없이
잘 동작하는지 확인 하고 사용하셔야 합니다.
728x90
반응형
'언어 > C언어' 카테고리의 다른 글
음수 표현 2의 보수 (4) | 2022.05.25 |
---|---|
json-c 라이브러리 사용 방법 (6) | 2022.05.16 |
Struct, Union 응용 (14) | 2022.01.25 |
switch문 다중처리 (4) | 2022.01.11 |
문자열 파싱 strtok (1) | 2022.01.05 |
댓글