반응형
구조체 내의 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을 리턴한다. // 다를 땐 문자열을 대소 비교하여 음수나 양수를 리턴한다. } }
반응형