2015-05-21 7 views
1

Я знаю, что могу запустить исполняемый файл в MATLAB с помощью команды !example.exe или system(example.exe), как указано в this question. Однако, когда я хочу передать аргументы программе C++, все, что я набираю, берется как строка. Как использовать переменные MATLAB?Запуск программы на C++ из сценария MATLAB с использованием переменных MATLAB в качестве аргументов

Например, скажем example.exe была следующая программа:

int main(int argc, char *argv[]){ 
    std::cout << argv[1] << std::endl;  
} 

Когда я называю это из MATLAB, как !example.exe hi, я получаю выход hi.

Но что, если мой сценарий MATLAB были на самом деле:

hi = 'HELLO!'; 
!example.exe hi 

Мой выход еще hi, но я хочу, чтобы это было HELLO!.

Как это сделать?

Заранее благодарен!

ответ

2

Вам нужно создать строку, используя переменные, а затем запустить ее с помощью eval. Например:

n = 3; 
command = sprintf('!example.exe %i', n); 
eval(command) 
+0

Спасибо за ответ; это работает, но можете ли вы (или кто-либо) прокомментировать 'system()' vs. 'eval()'? В чем разница/что является предпочтительной функцией? – marcman

+1

@marcman 'eval()' может запускать любую команду Matlab. 'system()' специально для обхода ОС. В вашем случае я не думаю, что это важно, какой из них вы используете. – shoelzer

+0

Обычно лучше [избегать 'eval'] (http://blogs.mathworks.com/loren/2005/12/28/evading-eval/) –

2

Не знаю, если это то, что вы ищете, но вы можете поместить команду выполнения вместе в строку, используя sprintf, а затем передать, что к системе. Что-то вроде:

hi = 'Hello!'; 
command = sprintf('example.exe %s', hi); 
system(command); 
1

Просто используйте конкатенации:

hi = 'HELLO!'; 
system(['example.exe ' hi]); 
Смежные вопросы