반응형
구조체안의 멤버를 처리 해본다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
struct tagAddress
{
char name[6]; // 이름
char phone[20]; // 전화
char address[72+1]; // 주소
char detail[200]; // 디테일
};
void main(void)
{
struct tagAddress ad1; //일반 구조체변수 선언
struct tagAddress* pad1; //포인터 구조체변수 선언
//포인터 구조체를 선언하면 일반 구조체변수를 포인터 구조체에 저장 해야한다.
pad1 = &ad1;
struct tagAddress ad2; //일반 구조체변수 선언
struct tagAddress* pad2; //포인터 구조체변수 선언
//포인터 구조체를 선언하면 일반 구조체변수를 포인터 구조체에 저장 해야한다.
pad2 = &ad2;
struct tagAddress ad3; //일반 구조체변수 선언
struct tagAddress* pad3; //포인터 구조체변수 선언
//포인터 구조체를 선언하면 일반 구조체변수를 포인터 구조체에 저장 해야한다.
pad3 = &ad3;
//구조체에 각각 값넣기
strcpy(ad1.name, "name1");
strcpy(ad1.phone, "phoneNumber1");
strcpy(ad1.address, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa72");
strcpy(ad2.name, "name2");
strcpy(ad2.phone, "phoneNumber2");
strcpy(ad2.address, "abcdefghijklmbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb22");
strcpy(ad3.name, "name3");
strcpy(ad3.phone, "phoneNumber3");
strcpy(ad3.address, "abcdefghijklmcccccccccccccccccccccccccccccccccccccccc33");
strcpy(ad3.detail, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa72_sssdddsd__");
printf("이름1 : %s \n", ad1.name);
printf("전화1 : %s \n", ad1.phone);
printf("주소1 : %s \n\n", ad1.address);
printf("이름2 : %s \n", ad2.name);
printf("전화2 : %s \n", ad2.phone);
printf("주소2 : %s \n", ad2.address);
printf("이름3 : %s \n", ad3.name);
printf("전화3 : %s \n", ad3.phone);
printf("주소3 : %s \n\n", ad3.address);
printf("디테일3 : %s \n", ad3.detail);
//2구조체의 이름을 1에 복사
//(*pad1).name = &pad2 -> name;
//첫번째 네임의 1열부분에 두번째 네임 복사.
//memcpy(&ad1.name[1], pad2->name, sizeof(ad1.name)-1);
//100열에 해당하는 어드레스를 5열 네임에 해당하는 5바이트로 짤라서 네임에 저장
//memcpy(ad1.name, ad2.address, sizeof(ad1.name)-1); //스트링의 마지막은 0이어야 하므로 마지막 0을 제외한것을 잘라줘야함
//memcpy(pad1->name, pad2->address, sizeof(ad1.name) - 1);
//strncpy(ad1.name, ad2.address, sizeof(ad1.name)-1); //배열 마지막에 0이 들어가야하므로 -1
//아드레스2의 5열부터 복사해서 디테일3에 저장. 즉 아드레스2열의 0~4열까진 버림 // +1은 1부터시작이고 [1]는 0부터시작임 즉 +156은 앞에 156자리수를 버리고 157부터 처리
//memcpy(pad3->detail, pad2->address+5, sizeof(ad2.address));
/********중요*************/
// 헤더와 전문이 같이 있는 디테일3을 앞에 72자리를 자른 뒤73바이트 길이를 가진 아드레스1에 넣는다.
//memcpy(pad1->address+0, pad3->detail + 72, sizeof(ad1.address)); //+로 쓰는 문장
//memcpy(pad1->address, &ad3.detail[72], sizeof(ad1.address)); //배열로 쓰는 문장
//memcpy(ad1.address, &ad3.detail[72], sizeof(ad1.address)); //0번배열부터 쓴다면 [0]은 생략해도 된다
//memcpy(&ad1.address, &ad3.detail+72, sizeof(ad1.address));
//포인터 꺽쇠는 가르키는 것이라 +로만 써야한다. 배열로 쓰려면
//printf("사이즈 sizeof(ad1.name) : %d \n", sizeof(ad1.name));
printf("\n======포인터 구조체 적용====\n\n");
printf("이름1 : %s \n", ad1.name);
printf("전화1 : %s \n", ad1.phone);
printf("주소1 : %s \n", ad1.address);
printf("이름2 : %s \n", ad2.name);
printf("전화2 : %s \n", ad2.phone);
printf("주소2 : %s \n", ad2.address);
printf("이름3 : %s \n", ad3.name);
printf("전화3 : %s \n", ad3.phone);
printf("주소3 : %s \n\n", ad3.address);
printf("디테일3 : %s \n", ad3.detail);
//값 입력
//strcpy((*pad1).name, "홍길2");
//strcpy((*pad1).phone, "02-1234-5672");
//strcpy((*pad1).address, "서울시 양천구 목동아파트 2단지");
//printf("이름 : %s \n", pad->name);
//printf("전화 : %s \n", pad->phone);
//printf("주소 : %s \n", pad->address);
}
반응형
'C언어' 카테고리의 다른 글
select 함수 (0) | 2023.03.10 |
---|---|
4. 구조체를 함수에서 사용하기 (0) | 2022.08.15 |
3. 구조체 포인터 (0) | 2022.08.15 |
2. 문자포인터와 정수 포인터 (0) | 2022.08.15 |
1. C언어 콘솔 찍기 (0) | 2022.05.31 |