Externes Programm starten per Variable

09/30/2012 20:55 marykillsjane#1
Hallo Leute ;
Ich wollte mal fragen ob es in C++ eine möglichkeit gibt um z.b.
über cin einen string abzuspeichern und diesen dann an an eine funktion zu übergeben die das eingegebene (z.b. notepad.exe ) ausführt?
Hier mal ein code beispiel wie ich mir das ganze vorstelle ( ohne includes usw):

string eingabe;
cout << "Geben sie den Namen des Programmes << endl;
cout << " welches sie starten möchten ein " << endl,
cin >> eingabe ;
// Ich kenne bis jetzt nur die Anweisung System("Name des Programmes")
//wenn ich nun aber versuche die Variable eingabe an System zu übergeben :
System(eingabe);
//kommt nur eine Fehlermeldung beim compilen wäre nett wenn jmd mir erklären könnte wie //ich das Problem lösen kann.
09/30/2012 21:42 Medix#2
ja wenn du mit windows arbeitest geht das mit der winapi zb mit der funktion: [Only registered and activated users can see links. Click Here To Register...]
gibt auch noch andere möglichkeiten mit der winapi sowas zu realisieren.

Wenn du bis jetzt noch nichts mit der winapi gemacht hast dann lies dich zuerst bisschen ein ,denn zum einstieg ist CreateProcess wahrscheinlich die falsche funktion x)
09/30/2012 21:45 werner100100#3
Quote:
Originally Posted by marykillsjane View Post
System(eingabe.c_str());
wenn du system beibehalten möchtest
10/01/2012 06:47 marykillsjane#4
Das Beispiel mit system klappt sehr gut vielen dank.
Wäre nur noch interessant zu wissen fürm mich was macht das .c_str bei system?
10/01/2012 12:11 Medix#5
[Only registered and activated users can see links. Click Here To Register...]

Quote:
Get C string equivalent
Generates a null-terminated sequence of characters (c-string) with the same content as the string object and returns it as a pointer to an array of characters.

A terminating null character is automatically appended.
10/01/2012 16:31 Fawkess123#6
Quote:
Originally Posted by marykillsjane View Post
Das Beispiel mit system klappt sehr gut vielen dank.
Wäre nur noch interessant zu wissen fürm mich was macht das .c_str bei system?
Jetzt mal leicht gesagt du kennst doch sicherlich die c strings : char Array[20]

Nun du hast bei der Variable jetzt 21 Charackter zur verfügen weil Der Computer bei der 0 anfängt zu zählen gut. Nun willst aber nicht alle 21 Charackter benuzen sondern nur 4 dann wird nach dem Array[3] alle restlichen Werte auf Null gesetzt also Array[4] bis Array[20] = 0; Das nennt sich Zero terminated. ( Habe es jetzt nur im Kopf wie ich es damals gelernt habe ). Kann aber auch sein dass ich mich irre, bitte korrigieren wenn was falsch ist.

Und anscheinend nimmt system() keine STRINGS an sonder nur char Arrays das machst du mit .c_str es in einen C(char) str(string) auch (array) gennant umwandeln.
10/01/2012 19:07 Nightblizard#7
Quote:
Originally Posted by Fawkess123 View Post
Jetzt mal leicht gesagt du kennst doch sicherlich die c strings : char Array[20]

Nun du hast bei der Variable jetzt 21 Charackter zur verfügen weil Der Computer bei der 0 anfängt zu zählen gut. Nun willst aber nicht alle 21 Charackter benuzen sondern nur 4 dann wird nach dem Array[3] alle restlichen Werte auf Null gesetzt also Array[4] bis Array[20] = 0; Das nennt sich Zero terminated. ( Habe es jetzt nur im Kopf wie ich es damals gelernt habe ).
Was? Wenn du ein Array mit 20 Elementen allokierst, dann erhälst du auch nur ein Array mit 20 Elementen. C-Strings sind hier keine Ausnahme. Des weiteren musst du nicht den gesamten nicht benötigten Teil des C-Strings mit Nullen füllen, um ihn zu kürzen.

Code:
char* foo = "Hello World"; //C-String mit 12 Elementen
char bar[] = "123"; //ist das gleiche wie:
char _bar[4] = "123";
//char meow[2] = "12"; //Das hier geht erst gar nicht
Die Null gehört zum String, du musst sie jedoch nur nicht selber hinschreiben, sprich der Compiler verlängert dir nicht das Array.


Quote:
Originally Posted by Fawkess123 View Post
Und anscheinend nimmt system() keine STRINGS an sonder nur char Arrays das machst du mit .c_str es in einen C(char) str(string) auch (array) gennant umwandeln.
c_str() wandelt den string nicht um, es gibt einen konstanten Pointer auf das zugrundeliegende Char-Array zurück. Intern ist std::string nämlich auch nur ein Char-Array.