Hi,
ich hab nun angewandt was du mir beschrieben hast. Aber irgendwas mache ich anscheinend beim kopieren der Namen falsch. Das Programm reserviert zwar die korrekte Anzahl an Zeilen für Namen (d.h. wenn zu der Jahreszahl 3 Namen gehören, wird auch Speicher für 3 Strings reserviert) aber irgendwie bleiben die leer. Soll heißen die Ausgabe liefert:
ich hab nun angewandt was du mir beschrieben hast. Aber irgendwas mache ich anscheinend beim kopieren der Namen falsch. Das Programm reserviert zwar die korrekte Anzahl an Zeilen für Namen (d.h. wenn zu der Jahreszahl 3 Namen gehören, wird auch Speicher für 3 Strings reserviert) aber irgendwie bleiben die leer. Soll heißen die Ausgabe liefert:
Woran könnte das liegen?Jahr: 1978
Namen:
(null)
(null)
(null)
Jahr: 1991
Namen:
(null)
Code:
// Ueberpruefung ob leere Zeile oder KOmmentar vorliegt
if(line[0]!='#' && line[0]!='\n')
{
// Initialisierung
valid_line=1;
charcounter=0;
linelen=strlen(line);
// Auslesen der Jahreszahl aus der Zeile
while(line[charcounter]!=32) // ASCII(32)=' '
{
charcounter++;
if(charcounter==linelen) valid_line=0;
} // Nach der Jahreszahl angelangt
if(valid_line==1) {
// Kopieren der Jahreszahl in die temporaere Datei
strncpy(temp,line,charcounter);
// Anhaengen des "Stringende" Zeichens
temp[charcounter]='\0';
no=(nobel_p)malloc(sizeof(nobel_t)); // Reservierung des Speichers
// fuer das neue Element
// Setzen der "next" Zeiger auf NULL und initialisierung von position
no->l=NULL;
no->r=NULL;
no->position=0;
// Speicherreservierung
no->names=(char**)malloc(sizeof(char*)*anzahl_kommas(line)+1);
// Einlesen der Jahreszahl ins Datenelement
sscanf(temp,"%d",&no->year);
charcounter++;
start=charcounter;
i=0;
while(line[charcounter]!='\n')
{
while(line[charcounter]!=',' && line[charcounter]!='\n')
{
charcounter++;
} // Nach dem ersten Namen angelangt
strncpy(temp,&line[start],charcounter-start);
temp[charcounter-start]='\0';
fprintf(stdout,"temp: %s\n",temp);
namenlaenge=strlen(temp);
no->names[no->position]=(char*)malloc(sizeof(char)*namenlaenge+1);
memset(no->names[no->position],0,namenlaenge+1);
//Namen kopieren
no->names[no->position] = temp;
no->position++;
if(line[charcounter]!='\n')
{
charcounter++;
start=charcounter+1;
}
}
no->names=names;
fprintf(stdout,"Einfuegen des Eintrags %d\n",no->year);// Zeilenausgabe
fprintf(stdout,"Wurzelzeiger->");// Zeilenausgabe
treehead = tree_add(treehead);
}
}