Alternative zu strlen



  • Wenn du von beidem den Quellcode hast, warum kannst du dann keine Änderungen an
    der "Wurzel des Übels" machen. 😕



  • Ich bin an der Wurzel. Zwei zusätzliche Variablen und eine Zusatliche Verzweigung sind auf jedenfall das kleinere Übel.



  • Du kannst die Änderung der Funktion, d.h. den zusätzlichen Parameter für die
    Rückgabe der Länge doch als Default-Parameter einfügen oder auch ne überladene
    Funktion verwenden. Das heisst, der restliche Code bleibt unberührt. Was willst
    du mehr. 🙂



  • Ich kann doch aber keine zwei Werte auf einmal zurückgeben.

    Die erste Methode gibt den char-Array zurück.

    Die zweite Methode braucht den char-Array UND die Länge des Arrays, die aber nur in der ersten Methode bekannt ist.

    Was ich gemacht habe ist, dass die erste Methode die Länge des Arrays jetzt in eine zusätzliche private Membervariable schreibt, von der die zweite Methode dann die Länge liest.



  • Reden wir aneinander vorbei oder liest du die Posts nicht richtig? Soweit ich dich verstanden habe, hast du eine Methode, in der du ein Array und die Länge des Arrays definierst. Nun rufst du eine zweite Methode auf, die mit dem (nur) in der ersten Methode bekanntem Array und der Länge arbeiten soll. Nun verstehe ich nicht ganz, warum du nicht z.B. die Länge per Argument an die zweite Funktion übergibst (Von mir aus kannst du ja dein Array per Return wert übergeben)?

    Falls du von Parameterübergabe im allgemeinen und/oder von ihren verschiedenen Spezifizierungen (Call by Reference, etc.) noch nicht so viel gehört haben solltest, siehe hier und/oder in verschiedenen Tutorials.

    Caipi



  • Vielleicht reden wir aneinander vorbei.

    Ich dachte an sowas:

    char* getArray(&long laenge);
    

    In laenge lieferst du halt zusätzlich die Länge des Array mit zurück !?!
    Deine Funktion hat gewissermassen zwei Rückgabewerte. Wo ist das Problem. 😕



  • Caipi schrieb:

    Reden wir aneinander vorbei oder liest du die Posts nicht richtig? Soweit ich dich verstanden habe, hast du eine Methode, in der du ein Array und die Länge des Arrays definierst. Nun rufst du eine zweite Methode auf, die mit dem (nur) in der ersten Methode bekanntem Array und der Länge arbeiten soll. Nun verstehe ich nicht ganz, warum du nicht z.B. die Länge per Argument an die zweite Funktion übergibst (Von mir aus kannst du ja dein Array per Return wert übergeben)?

    Falls du von Parameterübergabe im allgemeinen und/oder von ihren verschiedenen Spezifizierungen (Call by Reference, etc.) noch nicht so viel gehört haben solltest, siehe hier und/oder in verschiedenen Tutorials.

    Caipi

    Also:
    Die eine Methode gibt den Array, der erst in dieser Methode "gemacht" wird an die andere Methode zurück.
    Das heißt die andere Methode hat den Array aber NICHT dessen Länge.

    Auf der Seite zu der du den Link geschrieben hast heißt es wortwörlich:

    Es kann nur Einen (Rückgabewert) geben!

    Und genau daß ist das Problem. Ich müsste ZWEI Werte zurückgeben.



  • -=[P0I]=- schrieb:

    Auf der Seite zu der du den Link geschrieben hast heißt es wortwörlich:

    Es kann nur Einen (Rückgabewert) geben!

    Stimmt, nur hättest du dir vielleicht den Abschnitt darunter ebenfalls durchlesen sollen, in dem detailiert steht, was hier die anderen verzweifelt versuchen zu vermitteln.

    Funktion A ruft Funktion B auf, welches sowohl die Lange als auch das Array kennt. Der Funktion B wird eine Referenz als Parameter mitgegeben. Funktion B gibt das Array als Rückgabewert zurück und schreibt die Länge des Arrays in die Referenz. Somit weis auch Funktion A die Länge.

    Andere Möglichkeit: du gibst keinen Zeiger auf das Array zurück, sondern ein struct, in dem sowohl der Zeiger als auch die Länge drin sind.

    struct param
    {    char *array;
         int  length;
    }
    
    param getArray(void)
    {
    }
    


  • Ich hätte vielleicht sagen sollen dass eigentlich keine Methoden sind sondern Operatoren. Sorry.

    Der +-Operator gibt einen char-Array zurück. Und es gibt einen =-Operator der einen char-Array als Parameter hat. Wenn jetzt sowas kommt wie

    a = b + c;

    wird eben zuerst der +-Operator benutzt und dann der =-Operator mit dem vom +-Operator zurückgegebenen char-Array, was zur Folge hat das "Funktion B" eben nicht von "Funktion A" aufgerufen wird.



  • Aha 😉
    Was mir dazu auf die Schnelle einfällt ist, dass du wie bereits von Killing me softly angedeutet, eine Struktur zurückgibst, die das Array und die Länge beinhaltet.

    Beispiel:

    // Struktur kopiert aus Killing me softly's post :-)
    struct param
    {
         char *array;
         int  length;
    };
    
    // Gibt eine Struktur vom Typ param zurück.
    param operator+(const param& p1, const param& p2)
    {
            param tmp; // Dorthin werden p1 und p2 geschrieben.
    
            // Hier verbindest bzw. addierst du p1 und p2 nach
            // deinen kriterien;
    
            return tmp;
    }
    

    Andernfalls verstehe ich nicht ganz, was so schwer daran ist, std::string zu verwenden oder aber sich eine Funktion zu basteln, die die Länge (nach deinen Kriterien) zurückgibt (wenn strlen() dir nicht gut genug ist).

    Caipi



  • Da meine aktuelle Lösung beim überladenen +-Operator auserhalb der Klasse versagt, werde ich wohl doch eine Struktur (oder eine Klasse) zurückgeben.

    Danke an alle die mir mehr oder weniger geholfen haben.


Anmelden zum Antworten