| MATLAB Application Program Interface | Search  Help Desk |
| mxGetString | Examples See Also |
Copy a string mxArray's data into a C-style string
#include "matrix.h" int mxGetString(const mxArray *array_ptr, char *buf, int buflen);array_ptr
mxArray; that is, a pointer to an mxArray having the mxCHAR_CLASS class.
buf
mxGetString writes the character data into buf and then terminates the string with a NULL character (in the manner of C strings). buf can either point to dynamic or static memory.
buflen
buf. Typically, you set buflen to 1 plus the number of elements in the string mxArray to which array_ptr points. (See the mxGetM and mxGetN reference pages to find out how to get the number of elements.)
Note: Users of multibyte character sets should be aware that MATLAB packs multibyte characters into an mxChar (16-bit unsigned integer). When allocating space for the return string, to avoid possible truncation you should set
buflen = (mxGetM(prhs[0] * mxGetN(prhs[0]) * sizeof(mxChar)) + 10 on success, and 1 on failure. Possible reasons for failure include
mxArray that is not a string mxArray.
buflen with less than the number of characters needed to store the entire mxArray pointed to by array_ptr. If this is the case, 1 is returned and the string is truncated.
mxGetString to copy the character data of a string mxArray into a C-style string. The copied C-style string starts at buf and contains no more than buflen-1 characters. The C-style string is always terminated with a NULL character.
If the string array contains several rows, they are copied, one column at a time, into one long string array.
Use mxGetString to convert the data from a string array into a C string named buf:
void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray
*prhs[])
{
char *buf;
int buflen;
int status;
/* Find out how long the input string array is. Note: Users of
multibyte character sets should uncomment and use the second
buflen statement that follows and should comment out the first
buflen statement that follows. */
buflen = (mxGetM(prhs[0]) * mxGetN(prhs[0])) + 1;
/* buflen = (mxGetM(prhs[0]*mxGetN(prhs[0])*sizeof(mxChar))+1 */
/* Allocate enough memory to hold the converted string. */
buf = mxCalloc(buflen, sizeof(char));
if (buf == NULL)
mexErrMsgTxt("Not enough heap space to hold converted
string.");
/* Copy the string data from prhs[0] and place it into buf. */
status = mxGetString(prhs[0], buf, buflen);
if (status == 0)
mexPrintf("The converted string is \n%s.\n", buf);
else
mexErrMsgTxt("Could not convert string data.");
/* Manipulate buf as you would manipulate any C string. */
...
}
For an additional example, see mxgetstring.c in the mx subdirectory of the examples directory.
mxCreateCharArray, mxCreateCharMatrixFromStrings, mxCreateString