void* memset(void* dest, int ch, size_t count);
매개변수(인자)
void* dest = 시작 주소가 있는 포인터
int ch = dest부터 1바이트씩 담을 값
1바이트씩 담기는데 int라니?
-> 매개변수는 int지만 함수 내에서 unsigned char로 바뀐다.
unsigned char 이상의 값을 넣으면?
-> 짤림size_t count = count 바이트 크기
반환값(리턴값)
void* = dest가 반환된다.
설명
* 배열같이 데이터 사이에 빈틈없이 이어진 구조에 사용할 수 있다.
* ch 값을 1바이트마다 집어넣는다. 이때 1바이트 이상의 값이면 잘려서 들어간다.
* for문을 사용해서 똑같은 효과를 만들 수 있는데?
=> 어떤 부분이 원인인지는 잘 모르겠지만 for문보다 빠를 수도 있고 같은 수도 있다.
적어도 느리지는 않음.
* 단점 = 1바이트 이상의 값을 넣을 수가 없음. (for문으로 직접 만들 수 있잖아?)
예제
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char array[20];
memset(array, 'a', 19);
printf("%s", array);
}
* memset 함수가 널문자를 넣어주지 않는다는 걸 볼 수 있는 좋은 시간이었다.
* memset 함수 내에서 array를 직접 사용하지 않고 복사본을 만들기 때문에 array의 값이
변질되지 않음을 볼 수 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char array[20];
memset(array, 256, 20);
for (int i = 0; i < 20; i++) {
printf("%d", array[i]);
}
}
* unsigned char 이상의 값이 잘려서 들어간 모습을 볼 수 있다.
귀여운 그림은 낡은 창고님이 그리셨습니다.
반응형
'C' 카테고리의 다른 글
free 함수 (0) | 2020.12.28 |
---|---|
realloc 함수와 memcpy 함수 (0) | 2020.12.27 |
malloc 함수, calloc 함수 (0) | 2020.12.24 |
가변인자 (0) | 2020.12.24 |
공용체 Union (0) | 2020.12.23 |