Problem: String vergleich immer true
-
entferne die Zeile
line[strlen(line[i]) - 1] = '\0';
komplett. Eine Variante zum Entfernen von '\n' reicht, du hast beide genommen.
Außerdem war die Zeileif( strchr(line[i],'\n') ) *strchr(line[i],'\n')=0;
für die Stelle direkt nach fgets gedacht.
-
Ok, danke jetzt funktioniert es endlich!!!
Aber eine Frage hätte ich noch bevor das Thema "closed" ist und zwar handelt es sich bei
*strchr(line[l],'\n')=0;
doch um einen Pointer auf die erste Stelle im String in der ein \n steht, der dann 0 zugewiesen wird? Und handelt es sich bei dem 0 im Code um ein binär Null also \0 oder um eine einfache 0?
-
Wutz schrieb:
if( strchr(line[i],'\n') ) *strchr(line[i],'\n')=0;
Aus Effizienzgründen vielleicht lieber
char const *ptr = strchr(line[i], '\n'); if(ptr) { *ptr = '\0'; }
gulbim schrieb:
Aber eine Frage hätte ich noch bevor das Thema "closed" ist und zwar handelt es sich bei
*strchr(line[l],'\n')=0;
doch um einen Pointer auf die erste Stelle im String in der ein \n steht, der dann 0 zugewiesen wird?
Ja (wenn das Zeichen gefunden wird. Ansonsten wird NULL zurück gegeben). Siehe man: strchr
gulbim schrieb:
Und handelt es sich bei dem 0 im Code um ein binär Null also \0 oder um eine einfache 0?
binäre Null?? 0 ist Null ist '\0'
-
rüdiger schrieb:
Aus Effizienzgründen vielleicht lieber
char const *ptr = strchr(line[i], '\n'); if(ptr) { *ptr = '\0'; }
könntest du das mal erklären irgendwie wird mir die Funktionsweise nicht ganz klar.
Danke!
-
Hast du die von Rüdiger velinkte Dokumentation bzgöl strchr gelesen? Wenn ja, dann wäre die Frage geklärt.
-
Mein Problem liegt bei dem if:
if(ptr) { *ptr = '\0';
und nicht bei dem Teil den die Dokumentation erklärt. Mir ist die Allgemeine Funktionsweise nicht ersichtlich.
-
Das Zeichen an der Position ptr wird mit der 0 überschrieben.
Die 0 an der niederwertigsten Adresse (falls die Zeichenkette mehrere Nullbytes enthält) einer Zeichenkette definiert die Zeichenkettenlänge.
-
wofür dann das if? Ich glaub ich stehe auf dem Schlauch
-
Wird das '\n' nicht gefunden, liefert strchr NULL, dann ist ptr NULL.
Das if verhindert in diesem Fall einen Programmabsturz, den eine Dereferenzierung des Null-Zeigers verursachen würde.
-
Ah ok dan würde ich sagen: closed