2011-07-12 13 views
13

Tôi mới sử dụng lập trình C++ trong Windows. Tôi cố gắng để thực hiện một lệnh nói cuobjdump trong C++ mã sử dụng system() chức năng:Làm thế nào để sử dụng đúng hệ thống() để thực hiện một lệnh trong C++?

system("C:\\program files\\nvidia gpu computing...\\cuobjdump.exe --dump-cubin C:\\..\\input.exe"); 

đầu ra:

Usage : cuobjdump [options] <file> 

này tiếp theo là danh sách các tùy chọn cho cuobjdump.

Khi tôi thực hiện chương trình này, tôi luôn nhận được các tùy chọn trợ giúp cuobjdump được hiển thị trong dòng lệnh. Nó giống như cuộc gọi hệ thống không phân tích tên tệp. Tôi đang làm gì sai? Tôi nhận được kết quả tương tự trong khi sử dụng createprocess. Các tùy chọn --dump-cubin đưa ra một lỗi như thể tôi đã nhập sai nó.

+1

Ít nhất, bạn cần đảm bảo bạn đang thoát khỏi mọi dấu gạch chéo ngược dưới dạng \\ vs \. – Joe

+3

@kerrek Xin hãy xem các câu hỏi của tôi. Tôi không nhận được câu trả lời cho một số câu hỏi của tôi. :(Tôi sẽ chấp nhận một khi tôi nhìn thấy một – ash

+1

@ joe và tôi làm điều đó: ( – ash

Trả lời

10

tặng một thử với (có nghĩa là, xung quanh con đường cuobjdump.exe với ", đúng cách trốn thoát trong C++ như \"):

system("\"C:\\program files\\nvidia gpu computing...\\cuobjdump.exe\" --dump-cubin C:\\..\\input.exe"); 
+0

Cảm ơn và đã nhận nó – ash

+0

Bạn được chào đón :) Như một cách khác tôi nghĩ rằng bạn có thể thêm 'cuobjdump.exe' vào' PATH' của bạn. –

+0

Tôi đã đọc y đã làm điều đó. Vấn đề thực tế là với đường dẫn tập tin mà phải được đặt trong dấu ngoặc kép và thoát cho phù hợp. :) anyway mẹo của bạn cho thấy tôi giám sát của tôi! cảm ơn lần nữa – ash

5
system("cuobjdump --dump-cubin path\filename.exe"); 

Đó \f được giải thích bởi trình biên dịch như là một chuỗi thoát chuỗi, hãy thử path\\filename.exe

+0

@Ben Tôi đang sử dụng \\ – ash

4

rõ ràng nhất, \ là một nhân vật chạy thoát trong C++ chuỗi C /, vì vậy nó phải được tăng gấp đôi nếu bạn muốn sử dụng nó theo nghĩa đen.

system("cuobjdump --dump-cubin path\\filename.exe"); 
3

Giả sử rằng path là đúng, bạn phải sử dụng một đôi \\ trong chuỗi đại diện cho một đơn \.

+0

ya tôi đã làm Không thay đổi – ash

3

tôi đề nghị bạn sử dụng CreateProcess, hoặc ShellExecute/ShellExecuteEx kể từ khi bạn đang làm việc trên Windows. systemShellExecute cuối cùng chỉ gọi số CreateProcess.

+0

@ downvoter- Tôi đã bỏ lỡ điều gì? – Ajay

+1

Sự cố đã được giải quyết và hóa ra tôi đã bỏ lỡ một câu trích dẫn kép. Trong bài viết ban đầu của tôi tôi đã đề cập tôi đã nhận được kết quả tương tự với CreateProcess! Tôi đã không phải là downvoter nhưng tôi nghĩ rằng tôi nên trả lời câu trả lời của bạn !! :) – ash