2013-02-11 42 views
6

सी ++ प्रोग्राम से तर्क के साथ आप कमांड लाइन प्रोग्राम कैसे निष्पादित करते हैं? यह मैं ऑनलाइन क्या मिला है:सी ++ कमांड लाइन तर्क के साथ एक और प्रोग्राम निष्पादित करने के लिए प्रोग्राम

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

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

लेकिन यह एक वास्तविक कार्यक्रम स्थान स्वीकार करने के लिए प्रतीत नहीं होता है, तो मुझे यकीन है कि यह कैसे लागू करने के लिए नहीं कर रहा हूँ। मेरी आशा थी कि इस तरह कुछ होना चाहिए:

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

यह बैकस्लाश से संबंधित कई चेतावनियां देता है - और कार्यक्रम काम नहीं करता है। क्या यह आपको कुछ विशिष्ट स्थान पर प्रोग्राम करने की उम्मीद कर रहा है?

:

यह आउटपुट मैं कंसोल में मिलता है 'C: \ टेस्ट' एक आंतरिक या बाहरी कमांड, प्रचलित कार्यक्रम या बैच फ़ाइल के रूप में मान्यता प्राप्त नहीं है।

परिशिष्ट:

तो जॉन के उत्तर के आधार पर मेरे लिए सही संस्करण इस तरह दिखता है:

#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

किसी भी विचार प्रणाली से stdout (...) एसटीडी :: स्ट्रिंग या std :: stringstream रीडायरेक्ट करने के लिए कैसे है ? – Pupsik

+1

@Pupsik सिस्टम फ़ंक्शन एक int देता है। स्पष्ट रूप से आपको जो भी ऑपरेटिंग सिस्टम उपयोग कर रहे हैं, उसके लिए आपको स्टेटस कोड जानना होगा: "यदि आदेश शून्य सूचक नहीं है, तो लौटाया गया मूल्य सिस्टम और लाइब्रेरी कार्यान्वयन पर निर्भर करता है, लेकिन आमतौर पर इसे स्टेटस कोड द्वारा वापस आने की उम्मीद है आदेश दिया जाता है, अगर समर्थित है। " - http://www.cplusplus.com/reference/cstdlib/system/ से - तो आप लौटाए गए int के आधार पर उचित त्रुटि संदेश उत्पन्न कर सकते हैं। – Stepan1010

+0

क्या? क्या आपने मेरी टिप्पणी पढ़ी? – Pupsik

उत्तर

9

सबसे पहले, आपको डबल शाब्दिक तारों में बैकस्लाश का उपयोग करना चाहिए जब भी आप वास्तविक स्ट्रिंग मान में एक बैकस्लैश दिखाना चाहते हैं। यह भाषा व्याकरण के अनुसार है; एक अनुरूप कंपेलर इस बारे में चेतावनी से भी बदतर हो सकता है।

किसी भी मामले में, आप जिस समस्या का सामना कर रहे हैं वह इस तथ्य के कारण है कि रिक्त स्थान वाले पथ विंडोज़ में डबल कोट्स में संलग्न होना चाहिए। दोहरे उद्धरण चिह्नों के बाद से खुद को एक सी ++ स्ट्रिंग शाब्दिक अंदर भाग निकले जाने की जरूरत है, आप क्या लिखने की ज़रूरत

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

धन्यवाद जॉन। यह समस्या हल करता है। – Stepan1010

5

यह बैकस्लैश से संबंधित कई बार चेतावनी देता है

मेरा मानना ​​है कि \\\ का उपयोग कर सी ++ में एक बच निकला चरित्र है, इसके बजाय शायद इस समस्या को हल करेगा।

+1

इसके अलावा आपका कोड लिखित रूप में इस जानकारी वाले var के बजाय" myarguments "स्ट्रिंग को पास करेगा - जो हो सकता है जैसा सोचा वैसा। –