String Array



  • Guten Abend und ein frohes Neues,

    bin vor kurzem von C auf C++ umgestiegen und finde mich bei einigen Sachen noch nicht ganz zurecht.

    Dieses mal geht es um String Arrays - Ich bin es von cstring gewohnt ein 2D char array einfach zu allozieren und dann den Pointer dahin zu schieben, wo ich ihn haben will.

    Der Code ist jetzt einfach mal Pi mal Daumen zusammen gebastelt, also nicht auf kleine Fehler achten. 😃

    static char **array;
    char **dump = NULL;
    int count = 0;
    
    while (foo) {
    
         /*
               generiert String str
          */
    
         count++;
         array = (char **) realloc (dump, count * sizeof(char *));
         array[count-1] = (char *) malloc ( str.size * sizeof(char) +1 );
         dump = array;
         strcpy(array[count-1],str);
    }
    

    Es Funktioniert, aber ich erstelle ein 2d char array , würde aber lieber mit einem String array arbeiten.

    Muss ich hier den String ebenfalls allozieren oder wie mach ich das nun ?
    Oder muss ich an diesem Punkt zu Vektoren greifen ? Also ich hab da noch nicht so reingeschaut, nur mal überflogen.

    Gruß
    akoww



  • also da die C-Strings fehleranfällig sind, hat man die std::string entwickelt. das ist ein datentyp der sich um den ganzen kram kümmert, und noch zusätzliche dinge anbietet
    das gleiche gibts auch für normale arrays, nämlich std::vector oder std::array

    hier beispiele:

    int main()
    {
        std::string s = "lol test";
        s += " ist ein super ding";
        std::cout << s << std::endl; // ausgabe: "lol test ist ein super ding"
    
        //int arr[10];  // weg damit, das ist out
        std::vector<int> arr(10);
        arr[2] = 5;
        arr[50] = 10; // wird dir sofort fehler anzeigen im debugmodus und nicht später erst irgendwelche segment faults
    
        std::vector< std::string > arrayVonString;
        arrayVonString.push_back("test0");
    
        return 0x0;
    }
    

    und das beste daran ist, du musst am ende nicht mit delete[] oder free aufräumen



  • Danke Skym0sh0, genau das, was ich gesucht habe.


Anmelden zum Antworten