C++ zu C



  • Hi,
    ich will von c++ etwas in c schreiben, leider kann ich kein c++ wodurch ich es nicht umschreiben kann.
    Kann mir jemand das erklären:

    static std::vector<std::string> Arguments;
    
    void AddBootArgument(const char * argv)
    {
        std::string arg(argv);
        Arguments.push_back(arg);
    }
    

    mfg



  • Die Funktion AddBootArgument fügt dem dynamischen Array Arguments den String in argv hinzu. Das sollte auch ohne C++-Kentnisse leicht in C implementierbar sein.



  • //static std::vector<std::string> Arguments;
    static const char** Arguments; // dynamisches Array von Strings
    
    void AddBootArgument(const char * argv)
    {
        //std::string arg(argv);
        const char* arg = strcpy ( arg, argv ); // string von argv in arg kopieren
    
        //Arguments.push_back(arg);
        Arguments[next_index] = arg; // string in Array einfügen mit next_index, wo das geschen soll
    }
    

    Sollte in etwa stimmen. Auf jeden Fall solltest du eine Idee bekommen.



  • Danke, mehr wollt ich nicht 👍

    mfg



  • drakon schrieb:

    const char* arg = strcpy ( arg, argv ); // string von argv in arg kopieren.
    

    Mit strcpy() aufpassen, sonst krachts. 😉



  • 😕
    Was ist daran nicht in Ordnung?

    Für das ganze sollte natürlich eigentlich ein anständiger Wrapper her, damit man sich nicht mit dem ganzen Lowlevel Zeugs rumschlagen muss, aber das Beispiel sollte in Ordnung sein (von den offensichtlich nötigen assertions mal abgesehen).



  • drakon schrieb:

    void AddBootArgument(const char * argv)
    {
        const char* arg = strcpy ( arg, argv );
    

    😮
    Müsste das nicht so aussehen?

    void AddBootArgument(const char * argv)
    {
        char* arg = (char*)malloc(strlen(argv)+1);
        if (!arg) {
            // Fehlerbehaldung, falls kein Speicher mehr vorhanden
        }
        strcpy(arg,argv);
        ...
    


  • Ich mach zwar schon seit Ewigkeiten kein C mehr, aber das ging doch inklusive Speicher besorgen auch so:

    const char* arg = strdup ( argv );
    

    Lars


  • Administrator

    manni66 schrieb:

    Ich mach zwar schon seit Ewigkeiten kein C mehr, aber das ging doch inklusive Speicher besorgen auch so:

    Nicht in reinem C. Man findet die Funktion im POSIX Standard.

    @krümelkacker & Nexus,
    drakon hat das wohl als Pseudo-C-Code verstanden. WSK wollte ja nur erfahren, was da in etwa passiert und nicht einen korrekten äquivalenten C Code.

    Grüssli


Anmelden zum Antworten