-
memset 함수를 사용하는 이유C언어 Tip 2019. 2. 23. 00:46
#include <string.h> // string.h 파일이 필요합니다. #include <stdio.h> int main (){ char a[20]; // 1바이트마다 모두 65로 초기화 // 배열을 채울 때는 sizeof()함수를 사용하면 됩니다. // sizeof 함수 - 배열의 전체 바이트 크기를 반환합니다. memset(a, 65, sizeof(a)); // 출력을 통해 확인 for(int i=0; i< (sizeof(a)/sizeof(char)); i++){ printf("%c\n",a[i]); } }
출처 : https://twpower.github.io/79-usage-of-memset-function
이 코드를 살펴보자
char형, 즉 글자 20개를 저장할 수 있는 a라는 배열인데, 그 배열에 ascii code 값 65번, 즉 'A'를 a배열에 모두 저장하게된다.
그래서 a배열을 for문을 돌려 출력하면
모두가 A가 나오는걸 확인할 수 있다.
그렇다면 굳이, for문을 돌려서 대문자 A를 저장할 수 있는데, 왜 이렇게 memset이라는 처음보는 함수를 통해서 저장할까?
이유는 두가지다.
1. for문으로 돌려서 저장시키는것보다 memset함수를 이용하는게 훨씬 빠르다고한다. (내용 출처 위 링크 참조)
2. 이 함수를 알면 초기화할때 편하다.
그래서 이렇게 하는것같다.
#include <string.h> void *memset(void *dest, int c, size_t count);
설명
memset() 함수는 dest의 첫 번째 count 바이트를 값 c로 설정합니다. c의 값은 부호 없는 문자로 변환됩니다.
리턴값
memset() 함수는 dest에 대한 포인터를 리턴합니다.
두번째의 좋은 예이다. 한번씩 보거나 따라해보는것을 추천한다.
#include <string.h> #include <stdio.h> #define BUF_SIZE 20 int main(void) { char buffer[BUF_SIZE + 1]; char *string; memset(buffer, 0, sizeof(buffer)); string = (char *) memset(buffer,'A', 10); printf("\nBuffer contents: %s\n", string); memset(buffer+10, 'B', 10); printf("\nBuffer contents: %s\n", buffer); } /******************* Output should be similar to: *************** Buffer contents: AAAAAAAAAA Buffer contents: AAAAAAAAAABBBBBBBBBB */
출처 : https://www.ibm.com/support/knowledgecenter/ko/ssw_ibm_i_73/rtref/memset.htm
'C언어 Tip' 카테고리의 다른 글
Incompatible implicit declaration of built-in function ‘******’ (0) 2019.02.02 request for member '*******' in something not a structure or union (0) 2019.02.02 gets_s() 함수는 visual studio에서만 사용이 가능하다. (0) 2019.01.04 2차원 배열(2차배열) 선언할때 주의해야할점! (0) 2018.12.30 함수에서 배열 매개변수를 사용할때 주의할 점! (0) 2018.12.29