Parameterverknüpfung und -übergabe



  • Hi,

    Funktioniert der folgende Codeabschnitt so, dass ich damit einem Programm den Parameter P1 und P2 verknüpft und den zweiten Parameter outpFile übergebe?
    P1 und P2 sind dabei sehr große char arrays.
    Ich kann das gerade nicht testen. Sonst würde ich euch nicht mit dem Problem behelligen.

    char *path= "prog "; 
       char *outpFile = " out.txt"; 
       system(  strcat( strcat( strcat(path, (const char*)P1), (const char*) P2), (const char*)outpFile ) );
    


  • Nein, weil path auf ein Stringliteral zeigt, auf das du nicht schreibend zugreifen darfst. Die Casts sind übrigens unnötig.



  • versuch es so

    system(strcat(strcat(P1, path), outpFile));
    


  • Der übergebene String sollte etwa so aussehen:
    "<Programmpfad> <P1P2> <outputFile> "
    @strcäät :
    Bei dem von dir übergebenen String kommt P2 nicht vor.



  • Warum nicht einfach die Mittel nutzen, die C++ einem anbietet:

    Lauffähiges Beispiel:

    #include <iostream>
    #include <cstdlib>
    #include <string>
    
    int main()
        {
            std::string s1 = "Hallo ";
            std::string s2 = "Welt";
    
            std::cout << s1 + s2 << std::endl;
    
            // Für den Fall, dass man einen 'const char*' benötigt (für viele
            //  Funktionsaufrufe notwendig:
    
            std::cout << (s1 + s2).c_str() << std::endl;
    
            return EXIT_SUCCESS;
        }
    

    Grüße... Heiko



  • bwbg schrieb:

    Warum nicht einfach die Mittel nutzen, die C++ einem anbietet:
    Grüße... Heiko

    Weil ich bereits ein char array benutze. Ich glaube, dass das erstellen meines Strings
    als nicht-char-Array länger dauert, weil ich bei einem String am Anfang nicht so viel Speicher alloziieren kann wie ich brauche (so weit ich weiß) und die schrittweise speicher Alloziierung zumindest bei den char-Arrays sehr zeitaufwendig ist (ist das bei Strings tatsächlich anders?).

    Kann ich die char Arrays einfach in einen String konvertieren? Das sollte aber sehr schnell und mit wenig mehr Speicherplatzaufwand gehen (die Arrays sind wie gesagt sehr groß).



  • Cream schrieb:

    bwbg schrieb:

    Warum nicht einfach die Mittel nutzen, die C++ einem anbietet:
    Grüße... Heiko

    Weil ich bereits ein char array benutze. Ich glaube, dass das erstellen meines Strings
    als nicht-char-Array länger dauert, weil ich bei einem String am Anfang nicht so viel Speicher alloziieren kann wie ich brauche (so weit ich weiß) und die schrittweise speicher Alloziierung zumindest bei den char-Arrays sehr zeitaufwendig ist (ist das bei Strings tatsächlich anders?).

    Kann ich die char Arrays einfach in einen String konvertieren? Das sollte aber sehr schnell und mit wenig mehr Speicherplatzaufwand gehen (die Arrays sind wie gesagt sehr groß).

    klar. speicher zu anfang allokieren (nicht alloziieren!)

    #include <string>
    
    int main()
    {
        std::string mystr;
        mystr.reserve(512); // für 512 zeichen
    
        char buf[512]; // dein array
        // ... arbeite mit dem buffer
    
        // zuweisung:
        mystr = buf; // char[] zu std::string
        // O D E R 
        mystr.assign(buf);
    }
    

    du siehst...recht einfach 😉



  • Cream schrieb:

    [Ich glaube, dass das erstellen meines Strings
    als nicht-char-Array länger dauert, weil ich bei einem String am Anfang nicht so viel Speicher alloziieren kann wie ich brauche (so weit ich weiß) und die schrittweise speicher Alloziierung zumindest bei den char-Arrays sehr zeitaufwendig ist (ist das bei Strings tatsächlich anders?).

    Du "optimierst" ohne ahnung zu haben ob das irgendwas ausmacht, also völlig sinnlos.


Log in to reply