Main Content

mxSetField (C および Fortran)

インデックスおよびフィールド名を指定して、構造体配列にフィールド値を設定

C 構文

#include "matrix.h"
void mxSetField(mxArray *pm, mwIndex index,
  const char *fieldname, mxArray *pvalue);

Fortran 構文

#include "fintrf.h"
subroutine mxSetField(pm, index, fieldname, pvalue)
mwPointer pm, pvalue
mwIndex index
character*(*) fieldname

引数

pm

構造体 mxArray へのポインター。mxIsStruct を呼び出して、pm が構造体 mxArray を指しているかどうかを判断します。

index

配列内の要素のインデックス。

C では、mxArray の最初の要素は 0index をもっています。最後の要素の indexN-1 です。ここで、N は配列内の要素の数です。Fortran では、mxArray の最初の要素の index1 です。最後の要素の indexN です。ここで、N は配列内の要素の数です。

インデックスの計算の詳細については、mxCalcSingleSubscript を参照してください。

fieldname

構造体内のフィールドの名前。フィールドが構造体内に存在しなければなりません。mxGetFieldNameByNumber または mxGetFieldNumber を呼び出して、既存のフィールド名を判断します。

pvalue

fieldname に割り当てるデータを含む mxArray へのポインター。

説明

mxSetField を使用して、index 要素の fieldname フィールドに pvalue の内容を割り当てます。

fieldname の内容を置換する場合は、まず既存のデータのメモリを解放します。関数 mxGetField を使用してフィールドへのポインターを取得し、ポインターにある mxDestroyArray を呼び出した後、mxSetField を呼び出して新しい値を割り当てます。

構造体内の複数のフィールドや、mxArray 内の複数の要素に pvalue を割り当てることはできません。pvalue の内容を複数のフィールドに割り当てる場合は、関数 mxDuplicateArray を使用してデータをコピーしてから、各コピーに対して mxSetField を呼び出します。

この関数を使用して作成した構造体のメモリを解放するには、構造体配列のみに対して mxDestroyArray を呼び出します。pvalue が指している配列に対しては mxDestroyArray を呼び出さないでください。これを行うと、MATLAB® が同じメモリを 2 回解放しようとするため、メモリが破損する可能性があります。

メモ

MEX ファイルへの入力値は、読み取り専用の定数 mxArray です。入力値を変更しないでください。関数 mxSetCell* または関数 mxSetField* を使用して MATLAB 引数のセルまたはフィールドを変更すると、予期しない結果が生じます。

matlabroot/extern/examples/mx の次の例を参照してください。

代替方法

C 言語

C では、以下のステートメントを

field_num = mxGetFieldNumber(pa, "fieldname");
mxSetFieldByNumber(pa, index, field_num, new_value_pa);

mxSetField の呼び出しに置換できます。

mxSetField(pa, index, "fieldname", new_value_pa);

Fortran 言語

Fortan では、以下のステートメントを

fieldnum = mxGetFieldNumber(pm, 'fieldname')
mxSetFieldByNumber(pm, index, fieldnum, newvalue)

mxSetField の呼び出しに置換できます。

mxSetField(pm, index, 'fieldname', newvalue)

バージョン履歴

R2006a より前に導入