C언어 Tip
memset 함수를 사용하는 이유
우리서로용서해요
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