我在mex中有一个程序需要几个输入并检查它们是否合适。
其中一个输入是内部有几个标量和矩阵的结构。我的问题是,其中一个字段可以是3x1或3xN矩阵。每当它是3xN时,我得到一个奇怪/错误的结果。
让我们看看3个例子:
第3个输入是一个矩阵。如果我这样做:
mrows = mxGetM(prhs[2]);
ncols = mxGetN(prhs[2]);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
打印:
>> 1 x 360
尼斯。
然后,结构。
for(int ifield=0; ifield<nfields; ifield++) {
tmp=mxGetField(prhs[1],0,fieldnames[ifield]); //fieldnames has the names they shoudl have
// check if that fieldname exists in the struct
if(tmp==NULL){
mexPrintf("%s number: %d %s \n", "FIELD",ifield+1, fieldnames[ifield]);
mexErrMsgIdAndTxt( "CBCT:MEX:Atb:InvalidInput",
"Above field is missing. Check spelling. ");
}
switch(ifield){ //for each field checnk if it is how it shoudl be
// some other things that work
case 8:
mrows = mxGetM(tmp);
ncols = mxGetN(tmp);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
//check if they are what the should be
break;
case 9:
mrows = mxGetM(tmp);
ncols = mxGetN(tmp);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
//check if they are what the should be
break;
}
}
因此,结构中的第8个字段为str.field8=[0;0;0];
,第9个字段为str.field9=[zeros(1,360);zeros(1,360)]
。但是这段代码打印出来:
>> 3 x 1
>> -96713592 x 2
这里发生了什么?我应该使用其他函数来获取结构中矩阵的大小吗?我在tmp
变量中错误地获取了数据吗?
我很困惑,因为如果prhs[2]
是一个矩阵,它会打印正确的尺寸,因此mxGetM()
和mxGetN()
似乎可以做我想要的。