Problem mit ARGV[] und path



  • Hallo,
    habe gerade mit c++ angefangen und möchte mir einen ordnerflooder basteln 🙂

    So schaut mein code bisher aus:

    #include <direct.h>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    main (int argc, char **argv)
    {
      int foo;
    
      printf ("blaaa");
    
      if (argc <= 2)
        {
          printf ("Usage: %s <dir> <number of dirs>\n", argv[0]);
          exit (EXIT_SUCCESS);
        }
    
    //cout<<argv[1]  << endl;
    //cout<<argv[2]  << endl;
    // _mkdir("argv[1]\\argv[2]");
    // _mkdir("C:\\TestOrdner");
    
    string path = argv[1] + "\\" + argv[2];
    _mkdir(path);
    
     return 0;
    }
    

    Soo, wenn ich das compilen will kommt: "29 a.cpp cannot convert `std::string' to `const char*' for argument `1' to `int _mkdir(const char*)' "

    Ich nutze als Compiler Dev-C++ 4.9.9.2.

    Ich habe auch schon versucht <<argv[1]<< usw einzubinden, aber das mag er auch nicht 😞

    Wie bekomme ich diese beiden Variablen eingebunden???
    Danke für Tips 🙂

    MfG Teufel



  • teufel schrieb:

    habe gerade mit c++ angefangen...

    Wovon man nichts sieht, bis auf das du <string> und <iostream> inkludierst, aber printf und Co hinschreibst...

    teufel schrieb:

    Soo, wenn ich das compilen will kommt: "29 a.cpp cannot convert `std::string' to `const char*' for argument `1' to `int _mkdir(const char*)' "

    Davon mal abgesehen das ich weder direct.h noch _mkdir aus dem Standard kenne: einen std::string kann man mit der Methode c_str an eine C-Funktion übergeben (const char*).

    teufel schrieb:

    Ich nutze als Compiler Dev-C++ 4.9.9.2.

    Das ist das nächste das du dringends wechseln solltest. Nimm bitte einen aktuellen Compiler (bzw. eine aktuelle IDE mit eben solchen. z.B. Visual C++ 2008 Express oder Code::Blocks, beide sind konstenlos erhältlich).

    teufel schrieb:

    Danke für Tips 🙂

    1. Such dir vernümpftige C++ Lektüre (Keine Ahnung ob du C++ Bücher hast, aber nach dem Stil zu urteilen steht wenn nur C++ auf dem Umschlag und hat wenig mit C++ zu tun). Standardempfehlungen sind eigentlich Thinking in C++ und der C++ Primer, wobei dazu vielleicht zumindestens Grundlagenkenntnisse erforderlich sind.
    2. Tausche wie oben gesagt deine IDE aus, die ist veraltet.
    3. Wenn du C++ lernen willst, versuch dich nicht mit C zu befassen 😉

    cu André



  • hmmm, also "gerade" ist eigentl. 3 Tage 😉

    Beherrsche Perl und C++ habe ich mir vor ca. 1Jahr schonmal angeguckt, damals bin ich aber nicht weiter als eingabe und ausgabe gekommen, also cout und cin>> zum Beispiel.

    Bücher und das Internet nutze ich natürlich, der Code oben ist aus 3 Beispielen zusammengeschustert, deswegen sieht der Code vllt. unsauber aus .. aber ansich ist es doch egal, wie viel ich includiere, oder?

    Der Compiler ist laut Homepage die aktuelleste Version und wurde mir in einem anderen Forum empfohlen.. Außerdem sollte der diesen simplen Code problemlos schaffen ...

    Näher an der Lösung des Problems bin ich troztzdem nicht ...

    Kann man nicht irgendwie die Variablen ARVG in ' ' oder so setzen? Path wird doch gebildet .. nach meiner PERL oder PHP Logik sollte das funktionieren 😞

    Und zum printf: ich finde printf wesentlich besser als cout oder sowas, da man sich hier ne Menge Schreibarbeit spart 🙂

    MfG



  • teufel schrieb:

    hmmm, also "gerade" ist eigentl. 3 Tage 😉
    Näher an der Lösung des Problems bin ich troztzdem nicht ...

    Ähhhhh ... Asc hat Dir doch die Lösung geschrieben ... :

    _mkdir(path.c_str());
    


  • Jetzt gibt er mir

    a.cpp invalid operands of types `char*' and `const char[2]' to binary `operator+'

    aus ...

    string path = argv[1] + "\\" + argv[2];
    _mkdir(path.c_str());
    

    irgendwas scheint ja mit dem + verkehrt zu sein...

    Ich weiß allerdings nicht was, für mich ist dieser Code absolut logisch 😕



  • teufel schrieb:

    Bücher und das Internet nutze ich natürlich, der Code oben ist aus 3 Beispielen zusammengeschustert, deswegen sieht der Code vllt. unsauber aus .. aber ansich ist es doch egal, wie viel ich includiere, oder?

    Es kommt nicht darauf an wieviel oder wie wenig du includierst, dein Programmierstil ist kein C++, sondern wenn überhaupt C-Stil

    teufel schrieb:

    Der Compiler ist laut Homepage die aktuelleste Version...

    Logisch, die Entwicklung wurde ja auch eingestellt.

    teufel schrieb:

    Und zum printf: ich finde printf wesentlich besser als cout oder sowas, da man sich hier ne Menge Schreibarbeit spart 🙂

    C++ hat viel mit Typsicherheit zu tun, printf ist eben dies nicht... Und wenn dir printf und Co so gefällt, wäre wohl eher C etwas für dich.

    Ansonsten nimm dir ein gutes C++ Buch (die es teilweise auch kostenlos gibt, wenn man englisch lesen mag: Thinking in C++ Volume 1&2) und lerne damit die Sprache.

    cu André



  • Und zum printf: ich finde printf wesentlich besser als cout oder sowas, da man sich hier ne Menge Schreibarbeit spart

    Oh je, wirklich so faul?
    Wenn du C Funktionen nutzen willst, dann lerne auch C.

    string path = argv[1] + "\" + argv[2];

    + als verkettungsoperator funktioniert nur bei std::strings. Diese hast du hier aber nicht vorliegen.
    Stringstream wäre eine Möglichkeit, oder du fügst sie nacheinander path hinzu oder du setzt ein string( ) um die einzelnen Summanten, oder du castest sie, oder wie auch immer.

    Der Compiler ist laut Homepage die aktuelleste Version

    Richtig, die IDE wird nicht mehr weiterentwickelt(und hier geht es eher um die IDE als um den Compiler)

    und wurde mir in einem anderen Forum empfohlen

    töten

    Außerdem sollte der diesen simplen Code problemlos schaffen

    Sicherlich. Ist ja auch nur eine Empfehlung, aber wenn du dir z.B. mal Visual C++ Express angeschaut hast, wirst du Dev-C++ auch nicht mehr nutzen wollen.

    ähh und was macht das foo in deinem Code eigentlich?



  • teufel schrieb:

    irgendwas scheint ja mit dem + verkehrt zu sein...

    Wer C Programmiert darf mit sowas leben 😉

    Scherz beiseite char*/char[] verhalten sich nicht anwenderfreundlich. Ein Grund warum jeden der C++ lernen will gleich zu std::string und Co geraten wird. Diese lassen sich nämlich kopieren, addieren...

    cu André



  • Wer C Programmiert darf mit sowas leben

    Scherz beiseite char*/char[] verhalten sich nicht anwenderfreundlich. Ein Grund warum jeden der C++ lernen will gleich zu std::string und Co geraten wird.

    naja, er benutzt ja std::string(ob wissentlich oder nicht, ist hier eine andere Frage) aber bei den Programmparametern und den literalen kann man sich das meines Wissens nicht aussuchen.



  • Das foo wollte ich eigentlich garnicht mitposten, vergessen rauszunehmen :x

    Okay, vielen Dank! Dann werde ich mal den Compiler wechseln und den Code nach
    c++ Maßstäben umcoden ...

    mfg


Anmelden zum Antworten