exponenta event banner

Строки передачи в файле C MEX

В этом примере показано, как передавать строки функции MEX, построенной с помощью C Matrix API. Пример revord.c принимает символьный вектор и возвращает символы в обратном порядке.

Анализ кода C

Чтобы увидеть код, откройте revord.c в редакторе MATLAB ®.

Функция шлюза, mexFunction, создает строку C из входной переменной, prhs[0]. Путем выделения переменных типа mxArray из подпрограммы вычислений, revord, вы можете избежать внесения существенных изменений в исходный код C и C++.

Преобразование входного аргумента prhs[0] в строку в стиле Си input_buf.

input_buf = mxArrayToString(prhs[0]);

Выделение памяти для выходного аргумента, output_buf, строка в стиле Си.

output_buf = mxCalloc(buflen, sizeof(char));

Размер выходного аргумента эквивалентен размеру входного аргумента.

Вызовите подпрограмму вычислений, revord.

revord(input_buf, buflen, output_buf);

Преобразуйте выходные данные, output_buf, к mxArray и назначить plhs[0].

plhs[0] = mxCreateString(output_buf);

Не освобождайте память для этой переменной, поскольку она является выходным аргументом.

mxArrayToString функция, используемая для создания временного input_buf переменная, распределяет память; использовать mxFree для освобождения памяти.

mxFree(input_buf);

Пример сборки и тестирования

Выполните следующие команды из командной строки MATLAB.

Создайте пример.

mex -v revord.c

Вызовите функцию.

x = 'hello world';
y = revord(x)
y =
dlrow olleh

Связанные темы