당신은 유연한 배열을 사용하여 수행 할 수 있습니다. 구조체의 마지막 데이터 멤버 여야합니다.
struct person{
int c;
char name[];
};
유연한 배열이있는 구조의 메모리는 동적으로 할당되어야합니다. 표준 C에서
(6.7.2.1 구조와 조합 지시자)
가요 어레이 부재는 무시된다. 특히, 구조체의 크기는 유연한 배열 구성원이 누락 된 것처럼 보이지만, 누락이 의미하는 것보다 더 많은 후행 패딩을 가질 수 있습니다. How 어, 언제? (또는 ->) 연산자는 왼쪽 피연산자가 유연한 배열 멤버가있는 구조 ( 까지)이고 오른쪽 피연산자 인 은 해당 멤버의 이름을 지정하며 그 멤버가 가장 긴 배열로 동일한 요소 유형)을 사용하여 액세스하는 객체보다 큰 구조로 만들 수 있습니다. 배열의 오프셋은이 이 대체 배열의 오프셋과 다를지라도 플렉시블 배열 구성원의 배열로 유지됩니다. 이 배열에 에 요소가없는 경우 하나의 요소가있는 것처럼 작동하지만 해당 요소에 액세스하려는 시도가 있거나 포인터가 하나 생성 된 경우에는 동작이 정의되지 않습니다.
그리고 그것의
20 EXAMPLE 2 After the declaration:
struct s { int n; double d[]; };
the structure struct s has a flexible array member d. A typical way to use this is:
int m = /* some value */;
struct s *p = malloc(sizeof (struct s) + sizeof (double [m]));
and assuming that the call to malloc succeeds, the object pointed to by p behaves, for most purposes, as if
p had been declared as:
struct { int n; double d[m]; } *p;
(there are circumstances in which this equivalence is broken; in particular, the offsets of member d might
not be the same).
을 사용 또는 당신은 숯불에 대한 포인터를 선언하고 동적으로 만 배열 자체
struct person{
int c;
char *name;
};
가 왜 문자 * 이름을 사용하지 않는? – CMPS
1과 25 사이의 문자 길이를 제한하고자하므로 – Zombie