Schreibzugriff auf festes Array aus Main...



  • Hallo!

    Ich habe ein Array in der Main Methode erzeugt:

    char *TstNamPtrArr[10] =
        { "hans",
          "FRANZ",
          "oTTo",
          "lisa-marie",
          "LISA MARIE"
        };
    

    Nun sage ich mir in einer Untermethode Convert, dass ich die Groß- und Kleinschreibung anpassen möchte. Das mache ich und am Ende mache ich:

    void Convert(char *NamPtrArr[], int NamAnz){
    
    // einige Operationen vom jeweiligen String in eine puffer Variable
    strcpy(puffer,  NamPtrArr[i]);
    }
    

    Auf den Puffer habe ich Operationen gemäß der Konvertierung angewandt. Diese möchte ich in das Array realisieren. Das führt zum Absturz.
    Weiß jemand warum?

    Gruß,
    sourci



  • char* TstNamPtrArr[10] =
        { "hans",
          "FRANZ",
          "oTTo",
          "lisa-marie",
          "LISA MARIE"
        };
        char a = TstNamPtrArr[0][0]; // a == 'h'
    	TstNamPtrArr[0][0] = 'A';    // Zugriffsverletzung beim Schreiben an Position 0x..
    

    Es handelt sich um Zeiger auf const char ! Du könntest das umgehen, indem du schreibst:

    char* TstNamPtrArr[10][20] =
        { "hans",
          "FRANZ",
          "oTTo",
          "lisa-marie",
          "LISA MARIE"
        };
        char a = TstNamPtrArr[0][0]; // a == 'h'
    	TstNamPtrArr[0][0] = 'A';    // Ok!
    

    😉



  • Sorry!

    char TstNamPtrArr[10][20] =
        { "hans",
          "FRANZ",
          "oTTo",
          "lisa-marie",
          "LISA MARIE"
        };
        char a = TstNamPtrArr[0][0]; // a == 'h'
    	TstNamPtrArr[0][0] = 'A';    // Ok!
    

    😃



  • Danke für die Antwort ;).

    Das klingt sehr einleuchtend. Find ich grad etwas schade, dass man nicht das TstNamPtrArr gesondert in der main als char-Pointer auf veränderliche Werte allokiert... mhh... vielleicht lässt sich da was über Speicherklassen machen.



  • sourci schrieb:

    Danke für die Antwort ;).

    Das klingt sehr einleuchtend. Find ich grad etwas schade, dass man nicht das TstNamPtrArr gesondert in der main als char-Pointer auf veränderliche Werte allokiert... mhh... vielleicht lässt sich da was über Speicherklassen machen.

    Dass was Du vorhast (Groß- und Kleinschreibung anpassen) und TstNamPtrArr gesondert in der main als char-Pointer auf veränderliche Groß- und Kleinschreibung vorbereiten ereichst Du indem Du Stackspeicher verwendest, z.B. so:

    char hans[] =  "hans";
        char franz[] = "FRANZ";
        char otto[] =  "oTTo";
        char lisa[] =  "lisa-marie";
        char marie[] = "LISA MARIE";
    
    	char* TstNamPtrArr[10] = { hans, franz, otto, lisa, marie };
    
    	char a = TstNamPtrArr[0][0]; // a == 'h'
    	TstNamPtrArr[0][0] = 'H';    // Ok!
    

    😉


Anmelden zum Antworten