2014-10-30 4 views
1

나는 다음과 같은 구조를 가지고 :는 매개 변수

typedef struct { 
    char nom[30], prenom[20]; 
    int age; 
} ITEM; 

//and I have a function where I am entering the info as follow: 

void Lire(ITEM **items, int *nb_items) 
{ 
    int i,j = 0, novalida = 0; 
    ITEM *temp; 
    printf("*** Entrer les donnees et taper . pour terminer\n\n"); 

    for (i = 0; TRUE; i++) { 

     temp = (ITEM *) realloc(*items, ((*nb_items + 1) * sizeof(ITEM))); 
     if (temp == NULL) 
     { 
      printf("Il n'y a pas de memoire! \n"); 
      exit (0); 
     } 
     *items = temp; 
     printf("> nom : "); 
     scanf("%s", **items[i].nom); 

을하고 난 오류가있어 : 내가 값을 할당해야하는 경우 알고 싶은 그런

request for member ‘nom’ in something not a structure or union 
scanf("%s", **items[i].nom); 

을 나는 정상적인 구조와 같은 방식으로 동적 인 구조를 사용합니다.

+0

이것은 내가 볼 수있는 C 코드이며, 왜 당신의 질문에 C++ 태그를 붙였습니까? –

+0

죄송합니다. 처음입니다. –

+0

질문에 대한 진정한 대답은 간접적 인 실수를 너무 많이하지 않는 것입니다. 왜냐하면 이러한 실수는 쉽게 만들어지기 때문입니다. 첫 번째 솔루션은 항목과 nb_item을 구조체에 캡슐화 한 다음 함수를 변경하여 해당 구조체에 대한 포인터를 가져옵니다. 두 번째 해결 방법은 동적 배열 대신 링크 된 목록을 사용하는 것입니다. –

답변

1

연산자 .이 연산자 *보다 우선 순위가 높기 때문에 (*items[i]).nom을 원하는 반면 **(items[i].nom)을 수행하고 있으므로 괄호가 필요합니다.

items[i]. 연산자를 사용하려고합니다.이 유형은 ITEM * (구조체 또는 공용체가 아닙니다)입니다.

는 귀하의 예는해야

: 당신은 항목의 포인터에 대한 포인터를 가지고

scanf("%s", (*items[i]).nom); 
+1

나는 많은 포인터 derefernce (* items [i]). nom이 필요하다고 생각한다. (** 항목은 ITEM이 아닌 항목입니다.) – pm100

+0

@ pm100 감사합니다. –

+0

Étienne ahd @ pm100 감사합니다. 작동 중입니다 –

1

당신은 사용해야 뭔가

scanf("%s", items[i]->nom); 

처럼, 그래서 items[i]이 항목에 대한 포인터를 액세스은, 당신은에 ->를 사용 구조의 필드에 액세스하십시오.

+0

고마워, 나는 함께 노력했다. 및 ->하지만 작동하지 않았다. –