Hi, On Thu, 10 Oct 2002, Christian Weickhmann wrote:
void sm_schueler::setName(const unsigned char* n) { strcpy(name, (char*)n); }
name wird nirgends initialisiert.
void sm_schueler::setVorname(const unsigned char* vn) { strcpy(name, (char*)vn); }
Wahrscheinlich vorname, wird aber auch nirgends initialisiert. Also gibt's natuerlich SEGVs. Du musst erst Speicher allozieren, wenn du auf ihn schreiben willst.
void dateihandler::getXMLschueler(char* dateiname, sm_schueler* s){
... char *name = s->getName(); char *vorname = s->getVorname(); int schuljahr = s->getSchuljahr();
fprintf(stderr, "%d %s, %s [.] : %d\n", nummer, *name, *vorname, schuljahr);
*name ist das erste Zeichen von name (== name[0]), und das crasht natuerlich gleich nochmal, wenn es als pointer ("%s") interpretiert wird. Du willst 'fprintf (stderr, "... %s ...", ..., name, vorname ...);' Beachte, das selbst damit das Programm noch crashen wird, da wie gesagt die name und vorname member auf keinen Speicher zeigen.
void dateihandler::oeffne(char* dateiname){ doc = xmlParseFile(dateiname); if (doc == NULL) { fprintf(stderr, "Die Datei %s konnte nicht geöffnet werden.", &dateiname);
Nein. Du willst bloss 'fprintf (...., dateiname);' nicht &dateiname. Du solltest dich _ernsthaft_ mit pointern, Addressen und Strings in C beschaeftigen.
Folgendes für "sm_schueler schueler[100]" in main.cpp: Ich brauche ein Array, das insgesamt bis zu 100 Schüler speichern können soll (am besten unbegrenzt viele) und auf dessen Elemente ich dann noch Zugriff haben will.
Wenn du nicht die STL Klassen verwenden willst, dann wuerde ich eine verkettete Liste empfehlen, die du einfach in sm_schueler einbauen kannst. Ala: struct sm_schueler { ... struct sm_schueler *next; }; sm_schueler *erster = 0; sm_schueler * get_new_schueler () { sm_schueler *n = new sm_schueler; n->next = erster; erster = n; } void iterate() { for (sm_schueler *s = erster; s; s = s->next) do_something (s); } void free_them () { sm_schueler *n, *n_next; for (n = erster; n; n = n_next) { n_next = n->next; delete n; } } Ciao, Micha.