옥수수와 식빵 그리고 코딩

구조체 궁금한 부분 - *변수는 값입력을 받을 수가 없나? 본문

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로 주소를 줬는데도 안된단 말임??

Comments