Hilfe zu Parameterübergabe



  • Hallo zusammen,

    ich habe gerade ein grundlegendes problem bei der Parameterübergabe in C.
    Ich habe folgendes char Array definiert:

    char TestArray[200] = {0};
    

    Diese Array möchte ich jetzt als Referenz einer Funktion weitergeben, die dann in dieses Array Werte hinzufügt. Noch besser wäre es, wenn ich in dieser Funktion wiederum eine neue Funktion aufrufen könnte, die auch die Array-Referenz als Array-Referenz weiterreicht.

    Bsp:

    Hauptprogramm:

    char TestArray[200] = {0};
    
    Funktion1(TestArray);
    

    ...

    void Funktion1(char* ArrayRef)
    {
       Funktion2(ArrayRef);
    }
    
    void Funktion2(char* ArrayRef)
    {
       ArrayRef = "Parameterübergabe leicht gemacht";
    }
    

    Nachdem im Hauptprogramm die Funktion1 aufgerufen wurde, soll das char Array als Referenz zur Funktion2 weitergereicht werden und beschrieben werden. danach möchte ich im Hauptmenü den Wert im TestArray lesen können. Könnt ihr mir dabei helfen?

    Vielen Dank für eure Hilfe!
    Gruß



  • Hi

    Du schreibst "Diese Array möchte ich jetzt als Referenz einer Funktion weitergeben,..." aber das tust du nicht. Deine Funktions-Deklarationen enthalten nur char Pointer. Eine Referenz wuerde so aussehen:

    void Funktion2(char* & ArrayRef)
    {
       ArrayRef = "Parameterübergabe leicht gemacht";
    }
    
    void Funktion1(char* & ArrayRef)
    {
       Funktion2(ArrayRef);
    }
    

    Allerdings sind das jetzt Referenzen auf char Pointer. Deswegen kekommst du in deinem Code jetzt Compiler-Fehler, weil ein Char Array ebend kein Char Pointer ist.
    Eine Loesung fuer dein Problem besteht darin, die C Run-Time library Funktion 'strncpy' zu benutzen, etwa so:

    #include <string.h>
    
    void Funktion2( char* ArrayRef)
    {
        strncpy( ArrayRef, "Parameterübergabe leicht gemacht", 200);
    }
    

    Aber ganz ehrlich, ich wuerde das so nicht machen, aus mehreren Punkten:

    1. Pointer sind Vertrauensobjekte und man kann nur auf ihre Integritaet vertrauen, ausserdem sollte immer auf NULL Pointer geprueft werden.
    2. Die Laengenangabe sowohl von deinem Buffer als auch von dem String-Literal werden nicht wirklich beachtet.
    3. Bei Laengenaenderungen von deinem Array musst du auch den Code in der Funktion aendern.

    Ich wuerde die std::string Klasse aus der STL benutzen und auf Arrays und Pointer verzichten.

    #include <string>
    
    std::string TestString;
    
    void Funktion2( std::string & ArrayRef)
    {
    	ArrayRef = "Parameterübergabe leicht gemacht";
    }
    
    void Funktion1( std::string & ArrayRef)
    {
       Funktion2( ArrayRef);
    }
    
    int main( int argc, char* argv[])
    {
    	Funktion1( TestString); 
    	return 0;
    }
    

Anmelden zum Antworten