1. memset 함수
void* memset(void* ptr, int value, size_t num);
- void* ptr : 세팅하고자 하는 메모리의 시작 주소. 즉, 그 주소를 가리키고 있는 포인터가 위치하는 자리.
- value는 메모리에 세팅하고자 하는 값. int 타입으로 받지만 내부에서는 unsigned char 로 변환되어서 저장.
- size_t num은 길이. 바이트 단위로써 메모리의 크기 한조각 단위의 길이. 이는 보통 "길이 * sizeof(데이터타입)" 의 형태
반환값은 성공 시, 첫번째 인자로 들어간 ptr을 반환하고, 실패한다면 NULL을 반환.
value값을 unsigned char로 바꿔서 메모리 블록을 다루게 되어 이상한 값이 출력됨. int형은 4bytes, unsigned char은 1bytes이므로 int형 상수 1은 위의 그림과 같이 8bits 단위로 1로 초기화됨. 따라서 배열 내 모든 값들이 16843009로 초기화된다. memset() 함수를 초기화를 목적으로 사용할 때는 반드시 0 혹은 NULL 값만 사용하여야 한다.
https://stackoverflow.com/questions/18851835/create-my-own-memset-function-in-c
memset have to trust the length that is passed in. memset needs to work on a general piece of memory, not just a 0 terminated string - so there should not be such a check.
2. memchr
C언어 메모리 관련 함수 memchr()은 메모리 영역에서 임의의 문자를 검색하고 있으면 그 위치의 포인터를 구합니다.
- 헤더: string
- 형태:
void *memchr(const void *s, int c, size_t n)
- 인수 :
void *s 검사할 메모리의 포인터
int c 검색 문자
size_t n 검사할 영역의 크기
- 반환: void * 처음 발견된 위치의 포인터. 발견하지 못하면 NULL
3. memcpy
- 헤더 : string.h
- 형태 :
void _memcpy(void *dest, const void source, size_t num)
- 인수 :
source을 가리키는 곳으로부터, num 바이트 만큼을, destination 이 가리키는 곳에 복사한다.
- 반환: dest 를 가리키는 포인터
이 때, destination 과 source 의 타입은 모두 위 함수와 무관하다. 왜냐하면 이 함수는 단순히 이진 데이터를 복사하는 것이기 때문이다. 또한, 이 함수는 source 의 널 종료 문자(null terminating character) 을 검사하지 않는다. 언제나 정확히 num 바이트 만큼을 복사한다.오버플로우 문제를 방지하기 위해 destination 과 source 가 가리키는 배열의 크기는 반드시 num 바이트 이상이여야 하며, 서로 겹치면 안된다.
4. memcmp
- 헤더: string
- 형태:
int memcmp ( const void * str1, const void * str2, size_t n );
- 인수: str1 과 str2 를 n 의 바이트만큼 비교
- 반환:
앞자리에서부터 비교되며, str2 가 str1 보다 큰 경우 0 보다 작은 값, 작은 경우 0 보다 큰 값, 동일한 경우 0 을 반환합니다
https://modoocode.com/84
5. strnstr
char *strnstr(const char *big, const char *little, size_t len);
- 인수 :
- big 문자열의 len 길이 중, little 문자열을 찾음.
- 반환 :
1) little 값 비어 있으면 big 반환
2) big 문자열에서 little 문자열을 찾지 못하면 NULL을 반환.
3) big 문자열에서 little 문자열을 찾으면 big에 little 문자열 시작 부분 위치 주소를 반환한다.
6. strlcat
이거는 라피신때도 모르겠는데 지금도 암만봐도 모르겠다...헤헤히힣헿홓호호호 물어봐야게따...
size_t strlcat(dst, src, siz)