728x90
1
2
3
|
struct{
char name[20];
};
|
cs |
이렇게 하면 구조체 내부의 문자배열 name[20]에 문자열이 저장된다. 즉, 20바이트의 저장공간이 구조체 내부에 할당된다.
1
2
3
|
struct{
char *name;
};
|
cs |
이렇게 문자형을 가르키는 포인터를 선언하면, 문자열은 문자열 상수들이 모여있는 공간에 저장된다. 구조체 내부에는 포인터 name을 위한 1바이트만 할당되게 된다. 즉, 문자열을 위한 공간이 구조체 내부에는 없다. 문자열을 저장할 수 없다. 어딘가에 문자열이 이미 저장되어있을 경우에만 가르키면서 사용할 수 있다.
1
2
3
4
5
|
struct student{
char *name;
};
struct student s;
scanf("%s", s.name);
|
cs |
따라서, 아직 포인터 name의 주소가 옳바르게 초기화되지 않았기 때문에, 이렇게 하면 안된다!
1
2
3
4
|
struct student{
char *name;
};
struct student s = {"jin"};
|
cs |
하지만, 이렇게 하는건 가능하다. 구조체 안에있는 name이라는 포인터가 "jin"이라는 문자열상수를 가르키도록 하는것이기 때문이다.
728x90
'C프로그래밍 > 개인 공부' 카테고리의 다른 글
C언어 - 열거형(enumeration) (0) | 2022.12.11 |
---|---|
C언어 - 구조체와 함수 (0) | 2022.12.11 |
C언어 - 구조체와 포인터 (0) | 2022.12.10 |
C언어 - 문자열을 정수로, 정수를 문자열로 바꾸기 (0) | 2022.12.10 |
C언어 - 포인터의 기초 (0) | 2022.11.20 |