https://www.yes24.com/Product/Goods/117080938
공부한 것을 정리한 내용입니다.
구조체의 메모리값을 0으로 설정하거나 초기화 할려면 memset(구조체포인터, 설정한 값, sizeof(struct 구조체)); 함수를 이용하면 된다.
#include <stdio.h>
#include <string.h> // memset 함수가 선언된 헤더파일
struct active {
int x;
int y;
};
int main(){
struct active a1;
memset(&a1, 0, sizeof(struct active)); // a1의 주소연산자를 사용하여 구조체 변수의 값을 0으로 설정
printf("%d %d\n", a1.x, a1.y); // x,y 0으로 출력
return 0;
}
여기서 memset 함수를 이용해 구조체 변수의 값을 설정할 때는 &p1과 같이 주소연산자 &를 사용하여 변수의 메모리 주소를 구해서 넣어준다. 그리고 설정한 값과 크기 0을 넣어준다. 결과는 모두 0 이 출력해서 나온다.
또 다른 방법으로 일일이 주소를 넣어주는대신에 구조체 포인터를 할당해서 넣어준다 이때 포인터 안에 메모리 주소를 담고 있어서 &를 사용하지 않아도 된다.
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더파일
#include <string.h> // memset 함수가 선언된 헤더파일
struct active {
int x;
int y;
};
int main() {
struct active *a1 = malloc(sizeof(struct active));
memset(a1, 0, sizeof(struct active)); // a1을 구조체 크기만큼 0으로 설정
printf("%d %d\n", a1->x, a1->y); // 모두 0으로 출력
free(a1); // 동적메모리 해제
return 0;
}
이때 설정값(value)을 int 1(4byte)로 초기화하면 16843009 16843009 예상치 못한 값이 출력된다 memset함수안에 있는 value값이 unsigned char(1byte)값이 설정되있어서 1byte마다 int 1의 값(4byte)이 들어가면 0000 0001 0000 0001 0000 0001 0000 0001으로 표현되어서 16843009이 출력된 것이다.