本来ならAndroidエミュレータ上でのPDIC miniが動いていないといけない時期だが、ある問題で一週間足踏みしていた。今日やっとPDIC Unicode版の英辞郎119が検索できるようになった。ちょっとうれしいぞ。
今回遭遇した問題とは、
【現象】wcslenがどんなwchar_t文字列に対しても必ず1を返す
【理由】gcc ではwchar_tは4byteで定義されているのに、android NDKでは1バイトとしてライブラリがコンパイルされている。まぎらわしいことに、wchar.h自体は存在しているが、どのwcs*関数も正常に動かないので使ってはいけない。
sys/cdefs.h の該当箇所↓
/* our implementation of wchar_t is only 8-bit - die die non-portable code */
#undef __WCHAR_TYPE__
#define __WCHAR_TYPE__ unsigned char
【対策】wcs*関数を独自に実装する必要がある。
なお、C/C++側からGetStringChars()で取得したJava側のUnicode文字列(jchar)は2バイトなので注意!
sizeof(wchar_t)=4
sizeof(jchar)=2