구조체에 대한 포인터 배열을 보유하고있는 C 프로그램에서 작업하고 있습니다. 먼저 구조체는 다음과 같습니다구조체의 포인터 배열에 포인터를 반환
다음typedef struct
{
int ID;
char Name [20];
} rec;
내가 가진이 구조체의 1 생성 기능 : 이제이 기능이 잘 작동
struct rec* addEntry(){
rec *temp;
temp = malloc(sizeof(rec));
printf("Please give me an ID number\n");
scanf("%d", &temp->ID);
printf("Now give me a name, maximum size for this is 20 characters\n");
scanf("%s", &temp->Name);
return temp;
}
, 그것은 구조체를 생성하고 그쪽으로 포인터를 반환
struct rec* returnPointerToPointerArray()
{
rec *pointerArray[2];
pointerArray[0] = addEntry();
pointerArray[1] = addEntry();
printf("ID in main : %d\n", pointerArray[0]->ID);
printf("Name in main : %s\n", pointerArray[0]->Name);
printf("ID in main : %d\n", pointerArray[1]->ID);
printf("Name in main : %s\n", pointerArray[1]->Name);
pointerArray = malloc(sizeof(rec*)*2);
return pointerArray;
}
: 구조체 I는 포인터 배열을 생성하고, 구조체 포인터 향해 그것을 채우고 다른 기능을 가질 무슨 일이 일어나는지 확인하기 위해 포인터 배열에있는 위치에 저장된 값을 출력합니다. 이 시점에서 포인터 배열의 값이 정확합니다.
하지만이 포인터 배열에 대한 포인터를 malloc 방으로 반환해야합니다.
malloc 함수 라인은 나에게 오류 제공 : 내가 링크 된 목록을 사용할 수 없습니다 명확히하려면 지금
error: incompatible types when assigning to type 'struct rec *[(sizetype)(size)]' from type 'void *'
을, 내가 대신 포인터의 배열을 사용해야합니다. 는 다음과 같은 코드에서 나는 또 다른 오류가 내 메인 루프에 추가하려면 :
rec *pointerArray[2];
pointerArray = returnPointerToPointerArray(2);
printf("ID in main : %d\n", pointerArray[0]->ID);
printf("Name in main : %s\n", pointerArray[0]->Name);
이 나에게 다음과 같은 오류를 제공합니다 :
error: incompatible types when assigning to type 'struct rec *[2]' from type 'struct rec *'
어떤 도움을 환영합니다 후 더 많은 것이다. 사전에
감사합니다, Ylva
여기
'pointerArray는 = malloc에을 (를 sizeof (REC *) * 2);' 너는 이미 그 안에 물건을 저장하려고 시도한 이래로 의도 한대로 작동하지 않을 것이고 어쨌든 너무 늦었다. 'pointerArray'는 포인터가 아닌 자동 스토리지 배열이므로 malloc 할 수 없습니다. –
하지만 그 배열에 대한 포인터를 반환한다면 배열은 로컬로 선언되었으므로 사라지지 않을 것입니까? – Ylva
구조체 포인터를 사용하기 전에 포인터를 아무 곳이나 가리 키도록 초기화하지 않고 두 함수에서 struct에 대한 포인터를 만들었습니다. 아래 예제를 작성했습니다 (처음 작성시 오류가 있었으며 현재 테스트를 마쳤습니다). – ryyker