C MEX ファイルでの文字列の受け渡し
この例では、C 行列 API でビルドされた MEX 関数に文字列を渡す方法を説明します。例 revord.c では文字ベクトルを受け取り、その文字を逆の順で返します。
C コードの解析
コードを表示するには、MATLAB® エディターで revord.c を開きます。
ゲートウェイ関数 mexFunction は、入力変数 prhs[0] から C 文字列を作成します。mxArray 型の変数を計算サブルーチン revord から分離することにより、元の C および C++ コードを大きく変更せずにすみます。
入力引数 prhs[0] を C スタイルの文字列 input_buf に変換します。
input_buf = mxArrayToString(prhs[0]);
出力引数 output_buf ( C スタイルの文字列) 用にメモリを割り当てます。
output_buf = mxCalloc(buflen, sizeof(char));
出力引数のサイズは入力引数のサイズと同じです。
計算サブルーチン revord を呼び出します。
revord(input_buf, buflen, output_buf);
出力 output_buf を mxArray に変換し、plhs[0] に代入します。
plhs[0] = mxCreateString(output_buf);
この変数は出力引数なので、この変数用のメモリは解放しないでください。
一時変数 input_buf の作成に使用した関数 mxArrayToString がメモリを割り当てます。メモリを解放するには関数 mxFree を使用します。
mxFree(input_buf);
例のビルドとテスト
MATLAB コマンド ラインから以下のコマンドを実行します。
例をビルドします。
mex -v revord.c
関数を呼び出します。
x = 'hello world';
y = revord(x)y = dlrow olleh