2013-02-11 40 views
6

Làm cách nào để bạn thực hiện một chương trình dòng lệnh với các đối số từ một chương trình C++? Đây là những gì tôi tìm thấy trực tuyến:Chương trình C++ để thực hiện một Chương trình khác với các đối số dòng lệnh

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

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

Nhưng nó dường như không chấp nhận một vị trí chương trình thực tế, vì vậy tôi không chắc chắn làm thế nào để áp dụng điều này. Hy vọng của tôi là có một cái gì đó như thế này:

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

Điều này đưa ra một số cảnh báo liên quan đến dấu gạch chéo ngược - và chương trình không hoạt động. Bạn có mong đợi bạn có chương trình ở một số địa điểm cụ thể không?

Đây là sản phẩm tôi nhận được trong giao diện điều khiển:

'C: \ thử nghiệm' không được công nhận là một lệnh nội bộ hay bên ngoài, chương trình hoặc hàng loạt có thể hoạt động tập tin.

PHỤ LỤC:

Vì vậy, dựa trên câu trả lời của Jon đúng phiên bản cho tôi trông như thế này:

#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

Bất kỳ ý tưởng nào cách chuyển hướng stdout từ hệ thống (...) sang std :: string hoặc std :: stringstream ? – Pupsik

+1

@Pupsik Hàm hệ thống trả về một int. Rõ ràng bạn sẽ cần phải biết mã trạng thái cho bất kỳ hệ điều hành nào bạn đang sử dụng: "Nếu lệnh không phải là một con trỏ rỗng, giá trị trả về phụ thuộc vào việc triển khai hệ thống và thư viện, nhưng nó thường được mong đợi là mã trạng thái được trả về bởi được gọi là lệnh, nếu được hỗ trợ. " - từ http://www.cplusplus.com/reference/cstdlib/system/ - sau đó bạn có thể tạo ra thông báo lỗi thích hợp dựa trên int được trả về. – Stepan1010

+0

Cái gì? Bạn đã đọc nhận xét của tôi chưa? – Pupsik

Trả lời

9

Trước hết, bạn nên sử dụng đôi dấu gạch chéo ngược trong chuỗi ký tự bất cứ khi nào bạn muốn một dấu gạch chéo ngược xuất hiện trong giá trị chuỗi thực tế. Điều này là theo ngữ pháp ngôn ngữ; trình biên dịch phù hợp có thể làm tồi tệ hơn chỉ đơn giản là cảnh báo về việc này.

Trong mọi trường hợp, sự cố bạn gặp phải là do đường dẫn chứa dấu cách phải được đặt trong dấu ngoặc kép trong Windows. Vì các dấu ngoặc kép tự cần phải được thoát bên trong một chuỗi ký tự C++, những gì bạn cần phải viết là

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

Cảm ơn Jon. Điều này giải quyết vấn đề. – Stepan1010

5

Điều này cho phép một vài cảnh báo liên quan đến những dấu xồ nguợc

Tôi tin rằng \ là một ký tự thoát trong C++ sử dụng \\ thay vào đó sẽ có thể giải quyết vấn đề này.

+1

Ngoài ra, mã của bạn sẽ chuyển chuỗi "myarguments" thay vì một var chứa thông tin này như được viết - có thể là như dự định. –

Các vấn đề liên quan