2013-02-11 14 views
6

Bir C++ programından argümanlar içeren bir komut satırı programını nasıl çalıştırıyorsunuz?C++ Başka bir Programın Komut satırı argümanlarıyla yürütülmesi için program

http://www.cplusplus.com/forum/general/15794/

std::stringstream stream; 
stream <<"program.exe "<<cusip; 
system(stream.str().c_str()); 

Ama gerçek bir programdır konumunu kabul görünmüyor, bu yüzden bu nasıl uygulanacağı emin değilim: Bu Çevrimiçi bulundu budur. Umudum böyle bir şey var oldu: Bu ters eğik ilgili birkaç uyarı verir

std::stringstream stream; 
stream <<"C:\Tests\SO Question\bin\Release\HelloWorld.exe "<<"myargument"; 
system(stream.str().c_str()); 

- ve program çalışmıyor. Programın belirli bir konumda olmasını beklemiyor mu?

:

Bu

ben konsolda olsun çıktısında 'C: \ Testler' iç ya da dış komut, çalıştırılabilir program ya da toplu iş dosyası olarak tanınmıyor.

EK:

Yani Jon'un Yanıta göre benim için doğru sürüm şuna benzer: Bu ters eğik ilgili birkaç uyarı verir

#include <iostream> 
#include <cstdlib> 
#include <sstream> 
#include <cstring> 
int main(int argc, char *argv[]) 
{ 

std::stringstream stream;  
stream << "\"C:\\Tests\\SO Question\\bin\\Release\\HelloWorld.exe\"" 
     << " " // don't forget a space between the path and the arguments 
     << "myargument"; 
system(stream.str().c_str()); 

return 0; 
} 
+0

sistemden stdout'u (...) std için :: dize veya std :: stringstream yönlendirmek konusunda bir fikrin olduğunu değişmez bir C++ dize içinde kaçan gerekir ? – Pupsik

+1

@Pupsik Sistem işlevi bir int döndürür. Görünüşe göre, kullandığınız işletim sistemi için durum kodlarını bilmeniz gerekir: "Komut boş bir gösterici değilse, döndürülen değer sisteme ve kitaplık uygulamalarına bağlıdır, ancak genel olarak geri döndürülen durum kodu olması beklenir. destekleniyorsa komut çağırdı. " - http://www.cplusplus.com/reference/cstdlib/system/ adresinden - sonra döndürülen int'ye göre uygun bir hata mesajı üretebilirsiniz. – Stepan1010

+0

Ne? Yorumumu okudun mu? – Pupsik

cevap

9

Her şeyden önce, tek bir ters eğik çizgi gerçek dize değerinde görünmesini istediğinizde, çift ters eğik çizgileri kullanmalısınız. Bu dil gramerine göre; Uygun bir derleyici, bunun hakkında sadece uyarısı'dan daha kötü yapabilir.

Her durumda, karşılaştığınız sorun, boşluk içeren yolların Windows'ta çift tırnak içine alınması gerektiğinden kaynaklanıyor. çift ​​tırnak yana kendilerini ne yazmak gerekir

stream << "\"C:\\Tests\\SO Question\\bin\\Release\\HelloWorld.exe\"" 
     << " " // don't forget a space between the path and the arguments 
     << "myargument"; 
+0

Teşekkürler Jon. Bu problemi çözer. – Stepan1010

5

\'un C++'daki bir çıkış karakteri olduğunu \\ kullanarak muhtemelen bu sorunu çözeceğine inanıyorum.

+1

Ayrıca, kodunuz bu bilgiyi içeren bir varyasyon yerine "myarguments" dizgesini de yazacaktır. amaçlandığı gibi. –

İlgili konular