Adresse als Rückgabewert einer Funktion



  • Hallo, ich soll die Funktion strstr neu schreiben, bin sogut wie fertig nur mit der Rückgabe stimmt was nicht:

    char * strstr(const char * sp1, const char * sp2){
      for(int i=0;i<strlen(sp1);i++){
        for(int x=0;x<strlen(sp2);x++){
          if(sp1[i+x]!=sp2[x])
            break;
          if(sp1[i+x]==sp2[x]&&x+1==strlen(sp2))
            //return &sp1[i];			//HIER STIMMT WAS NICHT!
        }
      }
      return NULL;
    }
    

    Wie macht man das richtig?
    mfg.



  • //HIER STIMMT WAS NICHT!

    In Zukunft bitte aussagekräftige Fehlerbeschreibungen posten.
    Dein Rückgabewert muss const char* sein, da du auch const char* als Parameter nimmst und ansonsten die constness des Strings wegcasten würdest.
    In der Std-Lib ist die Funktion übrigens einmal für char* und einmal für const char* überladen.



  • strlen muss man auch nicht zig mal aufrufen. Das kann man einmal machen und sich das Ergebnis merken.


  • Mod

    kr schrieb:

    strlen muss man auch nicht zig mal aufrufen. Das kann man einmal machen und sich das Ergebnis merken.

    Genau genommen bräuchte man es sogar gar nicht. Man möchte schließlich bis zum Ende des Strings durchgehen, aber dafür ist nicht nötig vorher zu wissen wo es ist. Man kann einfach aufhören weiter zu gehen wenn man angekommen ist:

    for(int i=0;sp1[i];++i){
        for(int x=0;sp2[x];++x){
          // ...
    

Anmelden zum Antworten