Ungültiges Typargument von -> C-Strukturen

Lesezeit: 1 Minute

Benutzer-Avatar
some_id

Ich versuche, auf Elemente in einem Array von Strukturen zuzugreifen und die Strukturfelder wie folgt zu drucken

printList(Album *a, int numOfStructs)
{
    int i;
    int j;

    for(i = 0; i < numOfStructs; i++)
    {
         printf("number%d\n:", i+1);
         printf("%s", a[i]->field2);
         printf("%s", a[i]->field2);
         printf("%d", a[i]->field3);

         for(j = 0; j < a[i]->numOfStrings; j++)
         {
             printf("%s", a[i]->strings[j]);
         }
         printf("\n");
    }
}

aber ich bekomme jede Menge Fehler als solche

ungültiges Typargument von ‘->’

Was mache ich falsch mit diesem Zeiger?

a ist vom Typ Album* was bedeutet, dass a[i] ist vom Typ Album (es ist der ites Element im Array von Album Objekt, auf das gezeigt wird a).

Der linke Operand von -> muss ein Zeiger sein; das . Operator wird verwendet, wenn es sich nicht um einen Zeiger handelt.

Sie müssen die verwenden . Operator. Sie sehen, wenn Sie a anwenden * auf einen Zeiger dereferenzieren Sie ihn. Dasselbe gilt für die []. Der Unterschied zwischen * und [] ist, dass die Klammern einen Offset vom Zeiger erfordern, der zur Adresse im Zeiger hinzugefügt wird, bevor er dereferenziert wird. Grundsätzlich sind diese Ausdrücke identisch:

*ptr == ptr[0]
*(ptr + 1) == ptr[1]
*(ptr + 2) == ptr[2]

Um zu deiner Frage zu kommen: Ändern a[i]->field2 und a[i]->field3 zu a[i].field2 und a[i].field3.

  • Vielen Dank. verschiedene Teile meines Programms brauchen -> und andere brauchen . ? Ich habe gerade mit C angefangen und sobald ich glaube, Zeiger zu verstehen, merke ich, dass ich keine Ahnung habe. 🙁 Wenn ich die folgenden fgets(&(tempAlbum->field1),MAXCHARACTERS, stdin) versuche, erhalte ich eine Warnung: Übergeben von Argument 1 von „fgets“ von einem inkompatiblen Zeigertyp

    – some_id

    13. Februar 2011 um 7:57 Uhr

1383190cookie-checkUngültiges Typargument von -> C-Strukturen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy