Array Wert überschreiben



  • Hi Leute,

    ich habe folgendes Array:

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

    DesWeiteren habe ich folgenden Funktionskopf:

    void ConvertNamen( char * NamPtrArr[], int NamAnz );
    

    Die Funktion die die Probleme macht sieht folgendermaßen aus:

    void ConvertNamen( char * NamPtrArr[], int NamAnz ){
    
      for ( int i=0; i<NamAnz ; i++)  
       NamPtrArr[i][0] = toupper(NamPtrArr[i][0]);
    }
    

    Mein Problem besteht jetzt darin, das der Compiler abstützt und folgendes Fehlermeldung anzeigt:

    Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. 
    Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
    

    Wenn ich es in ein neues Array speichere funktioniert das ganze.
    Nur es muss doch auch möglich sein den Wert von NamPtrArr[i][0] zu überschreiben?!

    LG



  • TstNamPtrArr besteht aus read only Strings, die musst du dir kopieren bevor du sie verändern kannst.



  • Danke dir erstmal, aber stehe irgendwie gerade auf den Schlauch könntest du mir den Code dazu bitte mal posten?!

    Mein Ansatz ist folgender:

    strcpy(NamPtrArr[i][0],toupper(NamPtrArr[i][0]));
    

    Welcher aber falsch ist, da er mir ne Fehlermeldung ausgibt:

    Fehler 3 error C2664: 'strcpy': Konvertierung des Parameters 1 von 'char' in 'char *'
    


  • Dein NamPtrArr ist völlig in Ordnung, die Strings in TstNamPtrArr sind nicht beschreibbar.

    const char *TstNamPtrArr[] = {
        "hans",
        "FRANZ",
        "oTTo",
        "Lisa-marie",
        "LISA MARIE"
    };
    
    char **buffer = malloc(sizeof TstNamPtrArr / sizeof *TstNamPtrArr);
    for (int i = 0; i<sizeof TstNamPtrArr / sizeof *TstNamPtrArr; i++){
        buffer[i] = malloc(strlen(TstNamPtrArr[i])+1);
        strcpy(buffer[i], TstNamPtrArr[i]);
    }
    

    Danach funktioniert deine ConvertNamen-Funktion mit buffer wie du es mit TstNamPtrArr vor hattest.

    Edit: strcpy kopiert '\0'-terminierte Strings, NamPtrArr[i][0] ist ein Zeichen, kein String. Wenn denn willst du NamPtrArr[i] kopieren. Das hilft dir aber nicht wenn du das wieder in NamPtrArr[i] kopierst, weil dein TstNamPtrArr was du übergibst immernoch nicht beschreibbar ist.



  • Hallo,

    wenn der Typ von TstNamPtrArr geändert werden darf, kann man auch ein "beschreibbares" Array erzeugen:

    char TstNamPtrArr[][20] = 
    { 
      "hans", 
      "FRANZ", 
      "oTTo", 
      "Lisa-marie", 
      "LISA MARIE" 
    };
    

    und dann z.B.:

    for ( int i=0; i < sizeof(TstNamPtrArr) ; i++)
    		*((char*)TstNamPtrArr + i) = toupper(*(((char*)TstNamPtrArr) + i));
    

    MfG,

    Probe-Nutzer



  • sizeof TstNamPtrArr / sizeof *TstNamPtrArr
    

    geht das nur bei mir nicht?



  • wie peinlich scheint so als würds doch gehen? ich muß mal kurz weg 😉


Anmelden zum Antworten