Как правильно использовать system () для выполнения команды в C ++? - PullRequest
15 голосов
/ 13 июля 2011

Я новичок в программировании на C ++ под Windows. Я пытаюсь выполнить команду скажем cuobjdump в коде C ++, используя функцию system():

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

выход:

Usage  : cuobjdump [options] <file>

Далее следует список параметров для cuobjdump.

Когда я запускаю эту программу, я всегда получаю опции помощи cuobjdump, отображаемые в командной строке. Это как если бы системный вызов не анализировал имя файла. Что я делаю неправильно? Я получаю тот же результат при использовании createprocess. Параметры --dump-cubin выдают ошибку, как будто я ее опечатал.

Ответы [ 5 ]

11 голосов
/ 13 июля 2011

Попробуйте с (то есть, окружая путь cuobjdump.exe с ", правильно экранированный в C ++ как \"):

system("\"C:\\program files\\nvidia gpu computing...\\cuobjdump.exe\" --dump-cubin C:\\..\\input.exe");
5 голосов
/ 13 июля 2011
system("cuobjdump --dump-cubin path\filename.exe");

То, что \f интерпретируется компилятором как escape-последовательность строки, попробуйте path\\filename.exe

4 голосов
/ 13 июля 2011

Совершенно очевидно, что \ является escape-символом в строках C / C ++, поэтому его нужно удвоить, если вы хотите использовать его буквально.

system("cuobjdump --dump-cubin path\\filename.exe");
3 голосов
/ 13 июля 2011

Я предлагаю вам использовать CreateProcess или ShellExecute / ShellExecuteEx , поскольку вы работаете в Windows.system и ShellExecute в конце концов вызывают только CreateProcess.

3 голосов
/ 13 июля 2011

Предполагая, что path является правильным, вы должны использовать двойной \\ в строках для представления одного \.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...