5. 구조체 안의 멤버 변수에 특정한 문자열 잘라서 집어넣기 / 문자열을 특정 문자열 부터 삽입하기

    반응형

    구조체안의 멤버를 처리 해본다.

     

    #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

    댓글