Verstehe wieder was nicht
-
Hallo,
ich lese mit fgets() zwei Dateien Zeile für Zeile ein und verarbeite sie
anschließend und füge das verarbeitete zusammen. Dafür habe ich mir eine
kleine Splitfunktion geschrieben, die mir die eingelesene Zeilen an bestimmten
Positionen abschneidet.Komischerweise wird die erste Datei richtig eingelesen und auch meine Split-
funktion funktioniert ordentlich. Beim einlesen der zweiten Datei werden auf
einmal non-ASCII zeichen erzeugt/ausgegeben. Der Inhalt der beiden Dateien
enthält aber gar keine non-ASCII zeichen.Weiß jemand einen Ausweg?
Hier ist der entsprechende Code:
typedef struct { const char *resname; const char *atmname; } newstruct; char line[256]; newstruct *new_line = NULL; new_line = (newstruct *) malloc(100 * sizeof(newstruct)); void read (FILE *file) { while(fgets(line, sizeof(line), file) != NULL) { int len = strlen(line)-1; if(line[len] == '\n') line[len] = 0; new_line[j].a = split_string(line, 5, 9); new_line[j].b = split_string(line, 10, 14); j += 1; } } const char *split_string (char strin[], size_t pos1, size_t pos2) { size_t i = 0, slen = pos2 - pos1; char *str = malloc(slen*sizeof(char)); for (i=0; i<=slen; i++) str[i] = strin[pos1+i]; return str; }
Vielen Grüße,
simsa
-
Hallo simsa,
was mir auf Anhieb auffällt:
char *str = malloc(slen*sizeof(char)); for (i=0; i<=slen; i++)
paßt nicht zusammen (bzgl. slen).
-
Hallo Th69,
danke für den Tipp, ich habe es nun korrigiert
char *str = malloc((slen+1)*sizeof(char)); for (i=0; i<=slen; i++)
leider war es auch nicht die Lösung.
-
Du hast die Nullterminierung bei deinen neuen Strings vergessen.
-
Nullterminierung?
wie geht das?
-
Was für Member sind eigentlich .a und .b ?
Die kommen in der Definition gar nicht vor.
-
upps, sorry.
.a und .b sind beides const char *
-
simsa schrieb:
Nullterminierung?
wie geht das?
Das sind absolute C-Grundlagen.
Kapitel Strings.
(Was hast du in den letzten (fast) vier Jahren seit deiner Anmeldung gemacht?)Ein C-String hat als Endekennung eine '\0' am Ende. Die braucht auch Platz.
-
Hi,
ich habe das jetzt so gemacht und es scheint, als ob es funktioniert:
for (i=0; i<slen; i++) str[i] = strin[pos1+i]; str[slen] = '\0';
p.s. ich bin kein programmierer
-
ich bin kein programmierer
Dann must du eben zu einem werden, wenn du Programme schreiben willst/must.
-
knivil schrieb:
ich bin kein programmierer
Dann must du eben zu einem werden, wenn du Programme schreiben willst/must.
im nächsten leben, versprochen
-
Das wird dir in diesem Leben aber nicht helfen.
-
Hast doch schon recht gute Ansätze gefunden in deinem Programm.
Arbeite weiter daran und bilde dich fort, dann wirst du schon "ein Programmierer werden".