C-String mit Konstantem Wert anlegen, geht das auch dynamisch?



  • Hallole.

    Also ich habe in meinem Programm ziemlich oft einen String (Char Array) angelegt mit einem per #define festgelegten Wert.

    ....
    #define MAX_BUF  4096
    ...
    
    char var[MAX_BUF];
    ....
    

    Dieser MAX_BUF soll nun dynamisch werden.
    Das bedeutet, er wird einmalig bei Programmstart festgelegt und gilt dann bis zum Programm Ende.
    Entweder soll er 1024 oder 4096 Bytes sein.

    Wenn ich nun den Wert als
    int MAX_BUF anstatt per define zur Laufzeit festlege, motzt der Compiler natürlich, daß es sich bei der deklaration von var nicht um einen konstanten Wert handelt.

    Abhilfe könnte geschaffen werden indem ich var per new anlege:

    char *var = new char[MAX_BUF];
    

    Dann muss ich aber das Programm extrem umschreiben, und überall darauf achten daß, ich mit delete den Speicher wieder lösche.
    Das wäre ein riesen Aufwand.
    Einfacher wäre es, wenn ich einfach zur Laufzeit den Wert MAX_BUF einmalig festlege und dies auch noch als konstanter Wert.

    Nun frage ich mich wie und ob das überhaupt geht und welche Alternativen es gäbe...

    Vielleicht hat der eine oder andere nen Tip für mich?

    Danke, Mondmann



  • std::string str;
    str.reserve(size);
    


  • Hmmm...es handelt sich hierbei aber um eine Char-String(Char-Array), nicht um einen STL-String....



  • Mondmann schrieb:

    Hmmm...es handelt sich hierbei aber um eine Char-String(Char-Array), nicht um einen STL-String....

    ja, aber da du es ja sowieso umbauen musst, mach es doch gleich richtig.

    die größe von arrays muss bei der kompilierung bereits feststehen, deshalb wird dein vorhaben nicht gelingen. entweder du schlägst dich mit new[] und delete[] rum oder du nimmst std::string oder std::vector.



  • Ein STL String ist nicht drin, da es sich um eine C-Funktion handelt die eienn char* erwartet.
    Also muss es wohl new...delete sein...



  • Mondmann schrieb:

    Ein STL String ist nicht drin, da es sich um eine C-Funktion handelt die eienn char* erwartet.
    Also muss es wohl new...delete sein...

    std::vector<char> data(size);
    c_funktion(&data[0]);
    


  • Mondmann schrieb:

    Ein STL String ist nicht drin, da es sich um eine C-Funktion handelt die eienn char* erwartet.
    Also muss es wohl new...delete sein...

    Beschäftige dich doch mal bitte mit C++.

    std::string str = "Hallo";
    foo( str.c_str() );
    


  • Artchi schrieb:

    std::string str = "Hallo";
    foo( str.c_str() );
    

    Mondmann schrieb:

    eine C-Funktion handelt die eienn char* erwartet.

    ...nicht const char*.



  • vl boost::shared_array oder boost::scoped_array?


Log in to reply