Pass Strings in C MEX File
This example shows how to pass strings to a MEX function built
with the C Matrix API. The example revord.c accepts a character
vector and returns the characters in reverse order.
C Code Analysis
To see the code, open revord.c in the MATLAB® Editor.
The gateway function, mexFunction, creates a C string
from the input variable, prhs[0]. By isolating variables of
type mxArray from the computational subroutine,
revord, you can avoid making significant changes to your
original C and C++ code.
Convert the input argument prhs[0] to a C-style string
input_buf.
input_buf = mxArrayToString(prhs[0]);
Allocate memory for the output argument, output_buf, a
C-style string.
output_buf = mxCalloc(buflen, sizeof(char));
The size of the output argument is equivalent to the size of the input argument.
Call the computational subroutine, revord.
revord(input_buf, buflen, output_buf);
Convert the output, output_buf, to an
mxArray and assign to plhs[0].
plhs[0] = mxCreateString(output_buf);
Do not release memory for this variable because it is an output argument.
The mxArrayToString function, used to create the
temporary input_buf variable, allocates memory; use the
mxFree function to release the memory.
mxFree(input_buf);
Build and Test Example
Run the following commands from the MATLAB command line.
Build the example.
mex -v revord.c
Call the function.
x = 'hello world';
y = revord(x)y = dlrow olleh