[C/C++] C++ Primer Exercise 4.34 - Array of character pointers

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Coksnuss, 15. Oktober 2009 .

Schlagworte:
  1. 15. Oktober 2009
    C++ Primer Exercise 4.34 - Array of character pointers

    Ich lese grade C++ Primer und bin bei Exercise 4.34 und komm grad nicht weiter...

    Aufgabe:
    Mein code sieht so aus:
    main.cpp
    Code:
    #include <iostream>
    #include <string>
    #include <vector>
    
    using std::vector;
    using std::string;
    
    int main()
    {
     string temp;
     vector<string> vstr;
     
     std::cout << "Give me some strings, press CTRL+Z and ENTER when done" << std::endl;
     while(std::cin >> temp)
     {
     vstr.push_back(temp);
     }
    
    Bis hier hin funktioniert alles... Ich schreibe also erstmal beliebig viele strings in einen vector.

    Code:
     vector<string>::size_type size = vstr.size();
     [COLOR="Red"]char **pacp = new char[size];[/COLOR] [B]// <------[/B]
     
     for(vector<string>::iterator ix = vstr.begin(); ix != vstr.end(); ++ix)
     {
     char *str = new char[(*ix).length() + 1];
     *pacp = str;
     ++pacp;
     delete [] str;
     }
     
     delete [] pacp;
     
     return 0;
    }
    
    An der rot markierten Stelle harperts dann, die einzig valide Lösung die ich mit dem compiler zustande bekomme ist:
    char *pacp = new char[size];
    Aber das wäre ja dann einfach nur ein pointer zu einem char-array und kein pointer zu einem array mit character pointern.

    Ich denke mal für diejenigen die öfter mal mit C++ zu tun haben sollte das kein Problem sein, deshalb wäre eine Musterlösung ganz schön. Danke.
     
  2. 15. Oktober 2009
    AW: C++ Primer Exercise 4.34 - Array of character pointers

    Du willst das du size Menge an Zeiger speichern kannst, d.h. du musst auch Zeiger allokieren.

    Code:
    [COLOR="Red"]char **pacp = new char* [size];[/COLOR]
    Grüße.
     
  3. 15. Oktober 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: C++ Primer Exercise 4.34 - Array of character pointers

    Du musst zuerst ein Array für die Pointer allocieren und anschliessend für jeden String den Speicherplatz allocieren und den Pointer im allocierten PointerArray Speichern:

    Code:
    [COLOR="Green"]// Erst den PointerArray mit der länge initializieren[/COLOR]
    [COLOR="Blue"]char[/COLOR] **pacp; 
    pacp = ([COLOR="Blue"]char[/COLOR]**) [COLOR="Blue"]new void[/COLOR]*[size];
    
    [COLOR="Blue"]int[/COLOR] index = 0;
    [COLOR="Blue"]for[/COLOR](vector<string>::iterator ix = vstr.begin(); ix != vstr.end(); ++ix)
    {
     [COLOR="Green"]// Neuen Speicher für jeden String allokieren und den Pointer im PointerArray speichern[/COLOR]
     pacp[index] = [COLOR="Blue"]new char[/COLOR][(*ix).length() + 1];
     [COLOR="Green"]// String kopieren[/COLOR]
     strcpy(pacp[index], ix->c_str());
    
     [COLOR="Green"]// String Freigeben[/COLOR]
     [COLOR="Blue"]delete [/COLOR][] pacp[index];
    
     [COLOR="Green"]// Inkrementieren[/COLOR]
     index++;
    }
    
    [COLOR="Green"]// PointerArray freigeben[/COLOR]
    [COLOR="Blue"]delete [/COLOR][] pacp;
    
    Hier ein Bild zur Veranschaulichung wie es im Speicher dann aussieht:
    Bild

    Mfg Rushh0ur
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.