- 締切済み
JNIの文字列長
JAVAからJNIを使用し、Cを起動しているのですが、 10000バイト以上の文字列をJAVAに返却しようとすると10000バイトより先が文字化けしてしまいます。 Cから直接起動した場合は10000バイト以上でも処理できます。 JAVAのインターフェースは以下のようになっています。 lRet = analyzeKBN( lCountin, sWORDin, lCountout,); lCountin : int型 入力文字数 sWORDin :String型 入力文字列 lCountout : int型 出力文字数 sWORDout : String型 出力文字列 Cの中を見渡しても10000文字の制限はありまません。 cの作業領域はlCountin を元にmallocしています。 出力文字列が10000バイト以上になるときっちり10000バイト以上が文字化けして帰ってくるのですが、JNIの制限等あるのでしょうか? 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- dekopa-
- ベストアンサー率42% (161/378)
回答No.1
char* msg = (char *)malloc(文字サイズ+1); //ここでmsgに返す文字をセット msg[文字サイズ] = '\0'; //または最初に全部memsetでクリア return env->NewStringUTF(msg); でちゃんと返りませんか? あとは、C側のソースとJava側の呼び出しコードを晒してもらわないと。 あと、UTFの文字数はSJISのバイト数とは違うので、mallocの文字数はlength()の値を渡しちゃ駄目です。その辺間違えてませんか?