Hallo,
if (*line != ',') {
elements[counter] = *line;
// ergänze hier:
elements[counter+1] = 0;
printf ("xxx linechar: %c yyy elements: %s\n", *line,elements);
counter++;
}
else {
printf("\n\nes ist ein komma da: %c - elementsinhalt ist : %s\n", *line, elements);
printf("lineinhalt ist : %s\n", line);
counter=0;
}
Diese "ÐÓÿ¿" kommt daher, dass das Charakter-Array "elements" im Speicher irgendwo angesiedelt wird und so die Inhalte dort übernimmt?
Ja, im Prinzip schon. Da du elements[] nicht initialisierst (also mit einem definierten Anfangswert belegst), ist der Inhalt das, was "zufällig" an der Stelle im Speicher rumliegt.
Wie kriege ich das "weg" bzw. wie mache ich das richtig?
Bedenke, wie Strings in C organisiert und gespeichert werden: Ein Nullbyte markiert das Ende. Wenn du den String Zeichen für Zeichen aufbaust, musst du also dieses Nullbyte auch mit anfügen. Entweder erst am Ende der Schleife, wenn der String vollständig ist, oder in jedem Durchlauf aufs Neue. Letzteres hat den Vorteil, dass du auch in jedem Schleifendurchlauf ohne "Dreckeffekte" auf den Inhalt des Strings zugreifen kannst, nicht erst am Ende.
Konnte ich mich verständlich machen? Es geht hier eher um ein Grundverständnis, keine "Anwendung" im Blick.
Ja, und noch was zum Grundverständnis: Deine Schleife hat keine Prüfung daraufhin, ob der übergebene String überhaupt in elements[] passt. Übergibt man der Funktion einen längeren String als 120 Zeichen, dann schreibt deine Schleife irgendwann in Speicherbereiche, die sie nichts mehr angehen. Das ist dann ein klassischer Fall für einen "Buffer Overflow".
Dasselbe passiert, wenn ich einen String übergebe, der kein \n enthält. Denn deine while-Schleife bricht nur ab, wenn sie ein \n findet, läuft aber munter über das String-Ende hinaus, wenn kein \n vorkommt!
Ach so, und deine Funktion liefert kein Ergebnis zurück.
So long,
Martin
Kleine Geschenke erhalten die Freundschaft.
Große verderben sie aber meist auch nicht.