char 型でヌル終端の文字列でかつ不正なバイト列が含まれておらず、かつロケールを決め打ちにしてよいのであれば、1文字ずつ取り出すのに mblen、mbrlen、mbtowc、mbrtowc、mbrtoc32 を使うことができます。これらの関数の戻り値は次の文字のバイト数です。 mblen と mbrlen の使いわけは状態変数を自分で管理する必要があるかどうかです。mbrlen の第3引数に内部の状態をあらわす変数を指定します。 mbtowc と mblen の違いはコードポイントが必要であるかどうかです。mbtowc の第1引数にコードポイントが参照渡しされます。第1引数の型は wchar_t なので、OS によって結果が変わります。筆者は wchar_t のサイズが32ビットである Linux と Mac OS X で確認していますが、16ビットの Windows では未検証です。