Как правильно использовать system() для выполнения команды в C++?

Я новичок в программировании C++ под Windows. Я пытаюсь выполнить команду say 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 ошибку, как будто я опечатал ее.

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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