grundlagenproblem mit strstr()



  • Hi !

    Ich hab da so ein kleines Problem...
    Irgendwie schein ich da wieder n paar Grundlagen nicht im kopf zu haben...

    aus irgend einem grund funktioniert bei mir die strstr funktion in diesem Beispiel nicht:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void getCfgValueStr(char *value, const char *cfgFile)
    {
      FILE *file;
      char singleChar;
      char line[1024]={};
      char *linePtr = line;
    
      file = fopen(cfgFile ,"r");
      if(file != NULL)
      {
        while((singleChar=fgetc(file))!=EOF)
        {
          *linePtr++=singleChar;
          if(singleChar=='\n'|EOF)
          {
            linePtr = line;
            if( strstr(line, value) != NULL)printf("Suchstring \"%s\" gefunden\n", value);
            printf("%s",linePtr);
          }
        }
      }
      else
      {
        printf("Fehler beim Öffnen...\n");
      }
      fclose(file);
    }
    
    int main(int argc, char **argv)
    {
      char unused;
      getCfgValueStr("Transparenz","config.cfg");
      printf("\n");
      system("pause");
      return 0;
    }
    

    was mache ich hier falsch ?

    in meiner Datei steht übrigens:

    Transparenz =150
    Position=50,50
    Administration=admin.exe
    

    Ausgabe in der Console ist:

    Transparenz =150
    Position=50,50
    Administration=admin.exe
    Drücken Sie eine beliebige Taste . . .
    

    und system("pause"); benutze ich nur bei tests ^^

    Freue mich über jedl. hilfe !
    Mfg McMorf



  • mist... ich seh schon... ich hab immer nur ein zeichen in Line Stehen.....
    Mist...



  • McMorf schrieb:

    if(singleChar=='\n'|EOF) /* sieht irgendwie komisch aus */
          {
    


  • Wutz schrieb:

    McMorf schrieb:

    if(singleChar=='\n'|EOF) /* sieht irgendwie komisch aus */
    

    Entweder extrem tricky oder extrem falsch.
    Ich tippe auf letzteres.



  • stimmt n bissl nicht nachgedacht ^^ so ist es richtig :

    if(singleChar=='\n' | singleChar == EOF)
    

    Danke !
    Mfg McMorf



  • Besser du verwendest für solche Konstrukte || und nicht | wegen der Kurzschlussauswertung.
    Außerdem ist die EOF Abfrage hier redundant, die machst du ja vorher schon.
    Außerdem kann für lange Zeilen der Zeiger "überlaufen".
    Außerdem solltest du beim Reset des Zeigers auch das Array neu initialisieren, es bleiben sonst "Reste" von vorigen Zeilen im String übrig, die den anschließenden strstr-Test beeinflussen.
    Schon mal an fgets gedacht?



  • Hi !

    Ja, das mit dem überlaufen ist mir bewusst....
    genau so wie mit den resten die im Array noch drin sein könnten...

    Trotzdem danke !

    fgets... hmm... nö, noch nicht drüber nachgedach ^^

    Mfg McMorf


Anmelden zum Antworten