Main Content

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_bufmxArray に変換し、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

関連するトピック