(erledigt) C - Frage zu array von Pointern im typedef
-
Moin,
habe mir gedacht ich bin hier genau an der richtigen Stelle. Im Studium haben wir die Aufgabe, eine Häufigkeitsverteilung von Buchstaben und Buchstabenfolgen zu ermitteln. Ich habe mir gedacht, ich mache das über einen 26+er Baum. Deshalb möchte ich im Typedef eines Knotens 26 Pointer im Array Speichern, und dann auf diese zugreifen. Bin noch nicht weit gekommen, und bekomme direkt "assignment of Incompatible Poiter Types" angezeigt, und weiß nicht weiter. Deshalb wollte ich mal hier fragen:
Das Struct:
#include <stdio.h> #include <stdlib.h> #define ZEICHEN_MAX 42 typedef struct { char* zeichen; // das vorkommende Zeichen int zaehler; // wird inkrementiert bei mehrfachem vorkommen struct Knoten* zeiger[ZEICHEN_MAX]; //Array von Zeigern auf die nächsten Arrays } Knoten; void head_initialisieren(Knoten* kopf){ int i; kopf = (Knoten*) malloc(sizeof(Knoten)); kopf->zaehler=0; kopf->zeichen=NULL; for(i=0;i<ZEICHEN_MAX;i++){ kopf->zeiger[i]=NULL; } } Knoten* einfuegen(char *c){ int i; Knoten *neu; neu =(Knoten*) malloc(sizeof(Knoten)); neu->zaehler=0; neu->zeichen=c; for(i=0;i<ZEICHEN_MAX;i++){ neu->zeiger[i]=NULL; } return neu; } void baum_entfernen(Knoten* kopf){ int i; Knoten* temp; for(i=0;i<ZEICHEN_MAX;i++){ if(kopf->zeiger[i]!= NULL){ temp = kopf->zeiger[i]; // Hier gibts dann ne Warnung für das assignment baum_entfernen(temp); } } free(kopf); } int main() { return 0; }
Ich hoffe das ihr verstehen könnt was ich dann damit will. Sitz schon einige Zeit dran und weiß nicht wirklich weiter.
Für die frage warum ich das Array brauche:
Sollte im zu analisierendem Text jetzt "ab abc" stehen, wird beim ersten wort ein Struct für das a angelegt und Alle Pointer im Array zeiger auf Null gesetzt. wenn dann das b auf dem a folgt, wird ein neues Struct alloziiert,und ein Zeiger daraufim Array zeiger vom Struct a an position 2 (1) gespeichert, um damit die Folge der Zeichen zu speichern.
Danke für eure Hilfe
MfG
Kalle
-
Auf ideone gibts keinen Fehler: http://ideone.com/5tnIsl
-
hallo nathan,
danke für die schnelle Antwort.
Kann ich denn generell das struct pointer array im typedef schon verwenden?
Wir wurden auf Eclipse getrimmt, und irgendwie neigt man eher nicht dazu, die IDE zu wechseln, wenn man noch nicht so fit ist.
Eclipse gibt wie gesagt die Warnung "assignment of incompatible Pointer types" aus.
Gruß
Kalle
-
typedef struct { ... struct Knoten* zeiger[ZEICHEN_MAX]; } Knoten;
Hier wird ein unbenanntes struct definiert und anschließend ein typedef-alias mit dem Namen Knoten.
struct Knoten
innerhalb der Struktur verweist dagegen auf ein struct mit dem Tag-Namen Knoten, das ist etwas anderes.
typedef struct Knoten { ... struct Knoten* zeiger[ZEICHEN_MAX]; } Knoten;
sollte das Problem beseitigen.
-
viel zu einfach
danke, scheint zu funktionieren