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