📄 h5.c
字号:
/////////////////////Mex头文件////////////////////////////////////////////
#include "mex.h"
#include "String.h"
////////////////////用户C程序:C语言定义结构体 ///////////////////////////////
struct Person
{char Name[10];
int Age;
char Sex[2];
char Address[30];
char Tel[15];
};
///////////用户C程序:C语言输入结构体数据 ///////////////////////////////////////
void InputPerson(int n,struct Person *P)
{ int i;
FILE *fp1;
char *InPutFile;
InPutFile="Per.txt";
mexPrintf(" %s\n",InPutFile);
if((fp1=fopen(InPutFile,"r"))==NULL){mexErrMsgTxt(" Can't open InPutfile\n");}
for(i=0;i<n;i++)fscanf(fp1,"%s %d %s %s %s",P[i].Name,&P[i].Age,P[i].Sex,P[i].Address,P[i].Tel);
fclose(fp1);
}
////////////////// 接口程序mexFunction/////////////////////////////////////
void mexFunction(int nlhs,mxArray *plhs[],int nrhs, mxArray *prhs[])
{int i,n,buf;
struct Person *P;
//char *InPutFile;
mxArray *Data;
char **Fields;////mx结构体字段名
////////////////// 由 prhs[] 中取得Matlab输入数据
n=(int)mxGetScalar(prhs[0]);
//buf=(mxGetM(prhs[1]) * mxGetN(prhs[1]) * sizeof(mxChar)) + 1;
//mxGetString(prhs[1],InPutFile,buf);
P=mxCalloc(n,sizeof(struct Person));///mx内存分配方式为结构体分配内存
Fields[0]="Name"; Fields[1]="Age";
Fields[2]="Sex"; Fields[3]="Address";
Fields[4]="Tel";
InputPerson(n,P); ////调用C程序
Data=mxCreateStructMatrix(1,1,5,Fields);///创建mx结构体
for(i=0;i<n;i++){ //////为mx结构体赋值
mxSetField(Data,0,Fields[0],mxCreateString(P[i].Name));
mxSetField(Data,0,Fields[1],mxCreateDoubleScalar((double)(P[i].Age)));
mxSetField(Data,0,Fields[2],mxCreateString(P[i].Sex));
mxSetField(Data,0,Fields[3],mxCreateString(P[i].Address));
mxSetField(Data,0,Fields[4],mxCreateString(P[i].Tel));
plhs[i]=mxCreateStructMatrix(1,1,5,Fields);///将输出参数创建为mx结构体并分配内存
plhs[i]=mxDuplicateArray(Data);////mxArray对象--结构体数值拷贝
}
mxDestroyArray(Data); ///释放mxArray对象内存
mxFree(P);////////mx内存释放方式将结构体内存释放
}
///////////////////结束////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -