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 Zeile

    if( 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


Anmelden zum Antworten