Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- eslint
- 3강
- 정답
- getchar()
- 3판
- JavaScript
- 풀이
- 오류
- 쉼표필요
- 평균
- 합
- 티스토리 커버이미지 변경
- 원 면적
- Chapter3
- ㅔㄴ트 안잉
- 비트마스크
- perpect C
- +연산자 의미
- 점프 투 파이썬 #패키지 # 비전공자
- 3장
- 원 둘레
- c
- 백엔드 개발자 #로드맵
- PERPECT
- eslint 쉼표필요 오류
- 연습문제
- 실습예제
- () (+) 차이
- perpectC
- putchar()
Archives
- Today
- Total
옥수수와 식빵 그리고 코딩
구조체 궁금한 부분 - *변수는 값입력을 받을 수가 없나? 본문
#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로 주소를 줬는데도 안된단 말임??
'C > perpect C' 카테고리의 다른 글
C | 배열 포인터를 함수의 인수(파라미터)로 전달 (0) | 2022.03.03 |
---|---|
15장 파일처리 연습문제 (0) | 2022.01.12 |
12장 연습문제 - 문자열 (0) | 2022.01.08 |
11장 연습문제 포인터 기초 (0) | 2022.01.08 |
10장 변수 유효범위 연습문제 (0) | 2022.01.05 |
Comments