argv to string umwandeln



  • Hallo! Stehe bei einem ziemlich trivialen Problem an, ich weiß nicht wie ich argv in einen String bekomme.

    Habe folgendes probiert hat funktioniert aber leider nicht

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main(char ** argv , int argc){
    
    	char p_progName[250] = {" "};
    
    	string progName(p_progName);
    	progName = argv; //funktioniert nicht
    
            cout << argv <<endl; //funktioniert
    

    MFG THE_ONE



  • Warum sollte man auch einen Array von Strings in einen String bekommen?

    Du kannst natürlich versuchen, argv[0] in den String zu bekommen. Das dürfte so wie Du es versuchst klappen. BTW: Wofür ist p_progName?



  • Muss das nicht einmal dereferenziert werden?

    Und ist es nicht Übliucherweise umgekehrt, also argc zuerst?



  • cout liefert folgende ausgabe:

    ./mmanage database
    0x2
    

    meine Variante ist eh schlecht, ich wollt zuerst ein stringobjekt anlegen und es dann überschreiben. wie würde man es besser richtiger machen.

    LordJaxom schrieb:

    Warum sollte man auch einen Array von Strings in einen String bekommen?

    Du kannst natürlich versuchen, argv[0] in den String zu bekommen. Das dürfte so wie Du es versuchst klappen. BTW: Wofür ist p_progName?

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main(char ** argv , int argc){
    
    	char p_progName[250] = {" "};
    
    	string progName(p_progName);
    	progName = argv[0]; //funktioniert nicht
    
            cout << argv <<endl; //funktioniert
    

    das mit argv[0] liefert->

    Segmentation fault
    


  • argv basiert auf argc Argumenten, also:

    std::vector<std::string> args;
    
    for(int i = 1; i < argc; ++i) // oder doch <= ?! scheiß teil...
        args.push_back(argv[i]);
    
    // Ausgabe:
    for(int i = 0; i < args.length(); ++i)
        cout << "Argument #" << i << ": " << args[i] << endl;
    

    MfG SideWinder



  • THE_ONE schrieb:

    cout liefert folgende ausgabe:

    ./mmanage database
    0x2
    

    Und die Erklärung kam von Shinja. Der erste Parameter ist die Anzahl der Parameter (üblicherweise mit argc bezeichent) auch wenn Du es als char** interpretierst. Der Wert bleibt 2. Du hast nämlich 2 Parameter: "./manage" und "database".



  • Danke für eure Hilfe:
    argc und argv waren vertauscht
    Habs jetzt so:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc,char ** argv){
    
    	string progName(argv[0]);
    
    	cout << progName << ">>"<< endl;
    }
    

    MFG THE_ONE


Log in to reply