Problem beim strstr(BUFFER,STRING)



  • Ich bin dabei ein Programm zu schreiben, welches eine relative große HTML Datei (example.html) einlesen soll. Das ganze mache ich über den Puffer (buffer). Dann wird der Puffer nach ner bestimmten Zeichenkette "Krum3lmonst4" durchsuchte, oder eher so sollte es sein und dann sollte der Pointer (*pch) den Anfang der Zeichenkette auf dem Puffer zeigen. Dann werden 41 Zeichen in die Datei (fred.txt) kopiert jedoch nicht wenn das zeichen '<' vorkommt. Dieses sowie die nächsten 3 Zeichen werden übersprungen.
    Compilieren geht wunderbar, jedoch wenn ich das Programm ausführen will, gibt mir Linux nen "Speicherzugriffsfehler" zurück. Wenn ich das ganze mit nem String (str) probiere funktioniert das ganze wunderbar.

    Weiß jemand ne Antwort auf mein Problem?

    MFG Airmack

    #include <iostream.h>
    #include <fstream.h>
    #include <string.h>
    
    int main () 
    {
      char buffer[60000];
      int i;
      char * pch;
      char str[]= "safunsfuisfn<> Krum3lmonst4 </th> fnadfunadf";
    
      ifstream examplefile ("example.txt");
      ofstream fredfile ("fred.html");
      if (! fredfile.is_open())
            { cout << "Error opening file fred.txt"; exit (1); }
      if (! examplefile.is_open())
          { cout << "Error opening file example.html"; exit (1); }
    
      while (! examplefile.eof() )
          {
          examplefile.getline (buffer,60000);
          pch = strstr (buffer,"Krum3lmonst4");
    //    pch = strstr (str,"Krum3lmonst4");
          while (i<41)
          {
    	  if (*pch != '<' )
    	      {
    	      cout << *pch;
    	      pch++;
    	  }
    	  else if (*pch == '<')
    	  {
    	      pch+=3;
    	  }
              i++;
          }
      }
      cout <<endl;
      return 0;
    }
    


  • Hi,

    Du solltest Deine Variable I immer wieder zurücksetzen, da sie sonst weiter hochzählt, und schon beim zweiten Durchlauf die Bedingung für Deine Schleife nicht mehr erfüllen kann.

    Was ist eigentlich, wenn Dein Suchbegriff mehr als einmal pro Zeile auftritt? dann wird nur der erste gefundene ausgegeben.

    grüße Con@n



  • Der Suchbegriff wird nicht öfters vorkommen , ist exact einmal in der Datei drin und später wird er auch niemals öfters auftauchen, also sehe ich daher keine Problem. und dass mit 'i' habe ich behoben trotzdem gibt der mir noch immer nen Speicherzugriffsfehler 😞
    Danke fürs antworten.

    Kennt jemand einen bessere Art nach einem String in einer bestimmten Datei zu suchen?


Anmelden zum Antworten