C/perpect C
구조체 궁금한 부분 - *변수는 값입력을 받을 수가 없나?
옥식
2022. 1. 8. 22:49
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
//학생을 위한 구조체
struct student
{
int snum; //학번
char* dept; //학과 이름
char name[12]; //학생 이름
};
struct student hong = { 202200001, "컴퓨터정보공학과", "홍길동" };
struct student na = { 202200002 };
struct student you = { 202200003 };
//학생이름 입력
scanf("%s", na.name);
//na.name = "나한국"; //컴파일 오류 '식이 수정할 수 있는 lvalue여야 합니다.'
//scanf("%s", na.dept); //실행 오류
na.dept = "컴퓨터정보공학과";
you.dept = "기계공학과";
memcpy(you.name, "홍길동", 7);
strcpy(you.name, "홍길동");
strcpy_s(you.name, 7, "홍길동");
printf("[%d, %s, %s]\n", hong.snum, hong.dept, hong.name);
printf("[%d, %s, %s]\n", na.snum, na.dept, na.name);
printf("[%d, %s, %s]\n\n", you.snum, you.dept, you.name);
struct student one;
one = you;
if (one.snum == you.snum)
printf("학번이 %d로 동일합니다.\n", one.snum);
//if ( one == bae ) //컴파일 오류
if (one.snum == you.snum && !strcmp(one.name, you.name) && !strcmp(one.dept, you.dept))
printf("내용이 같은 구조체입니다.\n");
return 0;
}
이게 원본인데
여기서 you.dept부분을 입력받고싶어서
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
//학생을 위한 구조체
struct student
{
int snum; //학번
char* dept; //학과 이름
char name[12]; //학생 이름
};
struct student hong = { 202200001, "컴퓨터정보공학과", "홍길동" };
struct student na = { 202200002 };
struct student you = { 202200003 };
//학생이름 입력
scanf("%s", na.name);
//na.name = "나한국"; //컴파일 오류 '식이 수정할 수 있는 lvalue여야 합니다.'
//scanf("%s", na.dept); //실행 오류
char s;
scanf("%s", &s);
na.dept = &s;//구조체 안의 포인터는 내용을 못바꾸는건가? 이렇게 하면 실행은 되는게 -3경고창 뜸
you.dept = "기계공학과";
memcpy(you.name, "홍길동", 7);
strcpy(you.name, "임산공학과");
strcpy_s(you.name, 7, "홍길동");
printf("[%d, %s, %s]\n", hong.snum, hong.dept, hong.name);
printf("[%d, %s, %s]\n", na.snum, na.dept, na.name);
printf("[%d, %s, %s]\n\n", you.snum, you.dept, you.name);
struct student one;
one = you;
if (one.snum == you.snum)
printf("학번이 %d로 동일합니다.\n", one.snum);
//if ( one == bae ) //컴파일 오류
if (one.snum == you.snum && !strcmp(one.name, you.name) && !strcmp(one.dept, you.dept))
printf("내용이 같은 구조체입니다.\n");
return 0;
}
이렇게 하면
이렇게 됨
왜지
일단 내 추측
변수 dept는 char*로 문자열 상수기 때문에 주소는 저장 가능하나 문자열 저장이 안되기 때문에
-근데 주소값으로 넣었는데도 오류 뜨는건데?
알 수 없다 정말....
이건 알겠는데 난 *dept에 &s로 주소를 줬는데도 안된단 말임??