연재 완료/C Lang 예제코드 모음

C언어 구조체 및 공용체 주요예제1 (구조체)

라이피 (Lypi) 2018. 5. 28. 00:24
반응형

구조체 내의 char형 배열에 문자열 값을 넣을 때는 strcpy_s()함수를 쓴다 .

#include <stdio.h>
#include <string.h>

struct member {
	char name[10];
	char sex;
	int age;
};

int main()
{
	member kdh;

	strcpy_s(kdh.name, "홍길동");
	//strcpy_s()함수를 이용해 char형 배열에 값을 대입할 수 있다.
	kdh.sex = 'm';
	kdh.age = 22;

	printf("이름 : %s \n", kdh.name);
	printf("성별 : %c \n", kdh.sex);
	printf("나이 : %d \n", kdh.age);
}


바로 대입하고 싶을 때.

#include <stdio.h>

struct member {
	const char* name;
	//문자열로 바로 대입받고 싶다면 cosnt char*를 쓰자.
	char sex;
	int age;
};

int main()
{
	member kdh;

	kdh.name = "홍길동";
	kdh.sex = 'm';
	kdh.age = 22;

	kdh.name = "장발장";

	printf("이름 : %s \n", kdh.name);
	printf("성별 : %c \n", kdh.sex);
	printf("나이 : %d \n", kdh.age);
}


구조체 포인터를 사용한 예.

#include <stdio.h>

struct member {
	const char* name;
	//문자열로 바로 대입받고 싶다면 cosnt char*를 쓰자.
	char sex;
	int age;
};

int main()
{
	member kdh;
	member* mp = &kdh;

	mp->name = "홍길동";
	mp->sex = 'm';
	(*mp).age = 22;
	//(*mp).은 mp->와 같다.

	kdh.name = "장발장";

	printf("이름 : %s \n", kdh.name);
	printf("성별 : %c \n", mp->sex);
	printf("나이 : %d \n", (*mp).age);
}


얕은 복사를 이용한 구조체 교환

struct member {
	const char* name;
	//문자열로 바로 대입받고 싶다면 cosnt char*를 쓰자.
	char sex;
	int age;
};

void shallow_copy(member* m1, member* m2);

int main()
{
	member kdh, ssid;
	member* mp = &kdh;


	mp->name = "홍길동";
	mp->sex = 'm';
	(*mp).age = 22;
	//(*mp).은 mp->와 같다.

	ssid.name = "신사임당";
	ssid.sex = 'f';
	ssid.age = 32;

	printf("before swap \n\n");
	printf("이름 : %s \n", kdh.name);
	printf("성별 : %c \n", kdh.sex);
	printf("나이 : %d \n\n", kdh.age);
	printf("이름 : %s \n", ssid.name);
	printf("성별 : %c \n", ssid.sex);
	printf("나이 : %d \n\n", ssid.age);

	shallow_copy(&kdh, &ssid);

	printf("after swap \n\n");
	printf("이름 : %s \n", kdh.name);
	printf("성별 : %c \n", kdh.sex);
	printf("나이 : %d \n\n", kdh.age);
	printf("이름 : %s \n", ssid.name);
	printf("성별 : %c \n", ssid.sex);
	printf("나이 : %d \n\n", ssid.age);

}

void shallow_copy(member* m1, member* m2)
{
	member temp;

	temp = *m1;
	*m1 = *m2;
	*m2 = temp;
}


깊은 복사를 이용한 구조체 교환 (제대로 이해하진 못한듯)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct member {
	char* name;
	char sex;
	int age;
};

void shallow_copy(member* m1, member* m2);

int main()
{
	member kdh, ssid;
	member* mp = &kdh;


	mp->name = (char*) malloc(sizeof(char) * 20);
	strcpy_s(mp->name, 20, "홍길동");
	mp->sex = 'm';
	(*mp).age = 22;
	//(*mp).은 mp->와 같다.

	mp = &ssid;
	mp->name = (char*)malloc(sizeof(char) * 20);
	strcpy_s(mp->name, 20, "신사임당");
	ssid.sex = 'f';
	ssid.age = 32;

	printf("before swap \n\n");
	printf("이름 : %s \n", kdh.name);
	printf("성별 : %c \n", kdh.sex);
	printf("나이 : %d \n\n", kdh.age);
	printf("이름 : %s \n", ssid.name);
	printf("성별 : %c \n", ssid.sex);
	printf("나이 : %d \n\n", ssid.age);

	shallow_copy(&kdh, &ssid);

	printf("after swap \n\n");
	printf("이름 : %s \n", kdh.name);
	printf("성별 : %c \n", kdh.sex);
	printf("나이 : %d \n\n", kdh.age);
	printf("이름 : %s \n", ssid.name);
	printf("성별 : %c \n", ssid.sex);
	printf("나이 : %d \n\n", ssid.age);

}

void shallow_copy(member* m1, member* m2)
{
	member temp;

	temp = *m1;
	*m1 = *m2;
	m1->name = (char *)malloc(strlen(m2->name));
	strcpy_s(m1->name,20,m2->name);
	*m2 = temp;
}


구조체 내용 검색하기

#include <stdio.h>
#include <string.h>

struct member {
	char name[10];
	char sex;
	int age;
	char level[10];
};

int main()
{
	member session[5] = {
		{ "ziny", 'm', 29, "사장" },
		{ "iziny", 'm', 25, "사원" },
		{ "임부장", 'm', 39, "부장" },
		{ "심대리", 'f', 22, "대리" },
		{ "김이사", 'm', 29, "이사" }
	};

	for (int i = 0; i < 5; i++) {
		if (session[i].sex == 'm' && session[i].age > 20) {
			printf("이름 : %s \t 직위 : %s \n", session[i].name, session[i].level);
		}
	}

	for (int i = 0; i < 5; i++) {
		if (!(strncmp(session[i].name,"ziny",2))) {
			printf("이름 : %s \t 직위 : %s \n", session[i].name, session[i].level);
		}
		//int strncmp(const char* s1, const char* s2, size_t maxlen) : 두 문자열을 앞에서부터 비교하여 같으면 0을 리턴한다. 
		// 다를 땐 문자열을 대소 비교하여 음수나 양수를 리턴한다.
	}
}



반응형