728x90
반응형
memset Function
메모리의 내용(값)을 원하는 크기만큼 특정 값으로 세팅할 수 있는 함수.
memory + setting 메모리를 (특정 값으로) 세팅한다.
Function Prototype
void* memset(void* ptr, int value, size_t num)
arg 1: void* ptr
세팅하고자 하는 메모리의 시작 주소
즉, 그 주소를 가리키고 있는 포인터가 위치하는 자리
arg 2: int value
메모리에 세팅하고자 하는 값을 넣으면 됨
int 타입으로 받지만 내부에서는 unsigned char로 변환되어서 저장
즉 'a' 이런 것을 넣어도 무방하다는 뜻
arg3 3: size_t num
길이를 뜻함. 이 길이는 바이트 단위로서 메모리의 크기 한조각 단위의 길이를 말함
보통 sizeof 형태로 작성하면 됨
Return 값은 성공 시 첫번째 인자로 들어간 ptr을 반환하고
실패시 NULL을 반환함.
Header file은 memory.h 또는 string.h 둘 중 하나 사용
#include <stdio.h>
#include <string.h>
#include <memory.h>
void printAll(int* pArr, int len)
{
for (int i = 0; i < len; ++i)
{
printf("%d ", *(pArr + i));
}
printf("\n\n");
}
int main(void)
{
/* Change to string array */
char arr[] = "Hello World";
memset(arr, 'c', sizeof(char) * 5);
printf(arr); // ccccc World
puts("");
/* Initialize array */
// Use iteration 'for'
int arr1[20];
for (int i = 0; i < 20; ++i)
{
arr1[i] = 0;
}
printf("for : ");
printAll(arr1, 20);
//for : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
puts("");
// Use function 'memset'
int arr2[20];
memset(arr2, 0, sizeof(int) * 20);
printf("memset : ");
printAll(arr2, 20);
//memset : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
// Precaution //
int arr3[5];
// Initialize non zero value
memset(arr3, 1, sizeof(arr3));
for (int i = 0; i < 5; ++i)
{
printf("%d", *(arr + i)); // 9999999999
}
/*
* '0'이 아닌 int 타입의 숫자를 넣게 되면 예상할 수 없는 값으로 세팅됨
* 그 이유는 memset 함수는 1바이트 단위로 값을 초기화하기 때문
* 1 byte 단위로 1을 만들었기 때문에 4byte로 표현된 int 숫자 1은 제대로 된 숫자로 표현 불가
*
* 결론적으로,
* 0이 아닌 그리고 char 타입이 아닌 값을 넣어서 세팅하려 할 때는
* 우리가 원하는 값으로 세팅할 수 없음
*
* 즉, 0과 char 타입만 사용할 수 있음
* 그렇기 때문에 memset 함수는 보통 문자열(char 배열)에서 값을 변경하거나,
* 숫자 배열을 0으로 세팅할 때 사용함
*/
return 0;
}
728x90
반응형
'Language > C & C++' 카테고리의 다른 글
Function pointer (0) | 2022.11.19 |
---|---|
Visual Studio Short-cut (0) | 2022.11.18 |
[C, Python]Compare Score (0) | 2022.10.26 |
[TIP] strlen - remove newline (0) | 2022.10.26 |
[TIP] DO NOT USE fflush function (0) | 2022.10.25 |