C String Funktion strstr() selbst geschrieben

nochmals danke!

i=i-j;

ich bekomm wieder keine NULL zurück wenn der String nicht vorhanden ist, sondern Seg. fault :/

Code:
 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *self_strstr(char *text, char *suche);

int main()
{

  char text[200]="aaaaaac";
  char suche[200]="bbbbbb";
  //printf("%s\n",self_strstr(text,suche));
  puts(self_strstr(text,suche));
  
  return 0;
}

char  *self_strstr(char *text,char *suche){

      int i=0;
      int j=0;
      size_t suche_size;
      suche_size = strlen(suche);

      while(text[i] != '\0' &&  suche_size != 0){ // solange bis binäre Null erreicht wird bzw bis String suche komplett gefunden wurde

        if(text[i]==suche[j]){
          suche_size--;
          j++;
        } else {
            suche_size = strlen(suche);
            i = i-j; // zurück zu letzten Stelle bevor suche näher untersucht wurde
            j = 0;
          }
        i++;

      }
      if (suche_size == 0){
        return text+i-strlen(suche);
      }
      else return NULL;
    }
 
Zuletzt bearbeitet:
*edit*
wollte eig oben editiern net antworten -.-
 
Zuletzt bearbeitet:
*edit* -.-

ah mein inet nervt *sry die einträge können glöscht werden
 
Zuletzt bearbeitet:
Was für eine System nutzt du eigentlich und gibt puts(NULL) dir auch einen segfault?
 
Hallo! Ubuntu 8.04

Darii schrieb:
Was für eine System nutzt du eigentlich und gibt puts(NULL) dir auch einen segfault?

ja!

Ich hab nun mit nem Kollegen drüber gredet unter Vista funkt bei ihm. Fehler dürfte das sein
http://de.wikipedia.org/wiki/Schutzverletzung

meine Lösung nun

statt puts(self_strstr(text,suche));

mach ich

if(self_strstr(text,suche) != 0)

puts(self_strstr(text,suche));

else

puts("Keine Uebereinstimmung");
 
Das ist merkwürdig. Eigentlich sollte puts NULL fressen. Guck mal was bei ``man puts`` darüber steht. Übrigens solltest du, wenn dann auch ruhig gegen NULL prüfen. Also:

if(self_strstr(text,suche) != NULL)
 
Nur bitte vorher auch das Ergebnis zwischenspeichern, nicht dass Du das 2x aufrufst.

Also
Code:
char* ret = self_str...

if (ret)
  puts(ret);
else
  printf("oh noes");
 
Zurück
Oben