2010-11-22 2 views
2

Ich bin mit dem folgenden Code (auf Windows 7, wenn es einen Unterschied macht) zu ignorieren:Systemfunktion scheint Anführungszeichen

char temp[20000]; 
sprintf_s(temp, 20000, "\"C:\\Program Files\\Mozilla Firefox\\firefox.exe\" \"http://www.tvtak.com/servlet/Gateway/?C=addShows&channel=%s&show=%s\"", _channels[chId], name); 
system(temp); 

On läuft, zeigt die Konsole:

' C: \ Program 'wird nicht als interner oder externer Befehl erkannt, funktionsfähig Programm oder Batch-Datei.

'Kanal' wird nicht als interner oder externer Befehl, ausführbares Programm oder Stapeldatei erkannt.

'show' wird nicht als internen oder externen Befehl, ausführbare Programm oder Batch-Datei erkannt.

Aber wenn ich den Wert von 'Temp' über QuickWatch und fügen Sie es in CMD, es funktioniert gut. Was ist denn hier los?

Ich sollte erwähnen, dass die Parameter, die ich an die Zeichenfolge anhänge, nicht-lateinische Zeichen enthalten. Könnte das etwas damit zu tun haben?

Antwort

4

Sie sind besser dran mit CreateProcess() zu vermeiden cmd.exe Zitat Hölle. Aber wenn Sie system() verwenden müssen, können Sie einfach an den Anfang Ihres Befehls if 1==1 anhängen, damit es die Anführungszeichen für Sie nicht entfernt.

system("if 1==1 \"C:\Program..."); 

Weitere Informationen zu diesem Problem führen cmd.exe /? und sucht /S.

+0

+1 für CreateProcess() Vorschlag –

0

Sie müssen die gesamte Zeichenfolge in ein weiteres Anführungszeichen setzen. Versuchen Sie C-artige Zeichenfolgen in C++ - Code zu vermeiden.

Verwandte Themen