将std :: strings存储在mex单元阵列中

时间:2014-11-03 19:07:48

标签: matlab mex

受此post的启发,我有兴趣将std::strings传递到单元格数组中。但是,mxDuplicateArray接受mxArray格式变量。我尝试使用std::stringmxArray转换为mxGetString,但没有成功。

请你就此提出建议吗?

谢谢!

void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
    std::string str ("Hellooo"); 
    const char *cstr = str.c_str();
    mwSize len = 10;
    mxArray *mxarr = mxCreateCellMatrix(len, 1);
    mxArray *mxstr = mxCreateString("");
    mxGetString(mxstr, (char*) cstr, str.length());
    for(mwIndex i=0; i<len; i++) {
        // I simply replaced the call to mxDuplicateArray here
        mxSetCell(mxarr, i, mxDuplicateArray(mxstr));
    }
    mxDestroyArray(mxstr);
    plhs[0] = mxarr;
}

2 个答案:

答案 0 :(得分:1)

来自mxGetString上的文档:

  

调用mxGetString复制字符串mxArray

的字符数据

你想要的是相反的:从c风格的字符串创建mxArray。为此你可以使用 mxCreateString直接。它似乎试图用它来创建一个空字符串。这应该有效:

void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
    std::string str ("Hellooo"); 
    const char *cstr = str.c_str();
    mwSize len = 10;
    mxArray *mxarr = mxCreateCellMatrix(len, 1);
    mxArray *mxstr = mxCreateString(cstr);
    // no need for this line
    // mxGetString(mxstr, (char*) cstr, str.length());
    for(mwIndex i=0; i<len; i++) {
        // I simply replaced the call to mxDuplicateArray here
        mxSetCell(mxarr, i, mxDuplicateArray(mxstr));
    }
    mxDestroyArray(mxstr);
    plhs[0] = mxarr;
}

答案 1 :(得分:1)

您还可以删除对mxDuplicateArray(和mxDestroyArray)的调用。

#include "mex.h"
#include <string>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    std::string str("Hellooo"); 
    const char *cstr = str.c_str();
    mwSize len = 10;
    mxArray *mxarr = mxCreateCellMatrix(len, 1);
    for (mwIndex i=0; i<len; i++) {
        mxSetCell(mxarr, i, mxCreateString(cstr));
    }
    plhs[0] = mxarr;
}

未经测试...