MinGW 5.1.4で不可解な挙動に遭遇したのでメモのみ。
まずCロケールではisleadbyteが機能しません。これはVisual C++のCライブラリも同じで、おそらく意図された通りの挙動。しかし、isleadbyteを機能させるためにsetlocale( LC_ALL, "")でデフォルトのロケール(Japanese_Japan.932)に切り替えると、putchar2回で2バイト文字1つを出力する機能が動作しなくなっています。かといって、2バイト文字が扱えなくなっているわけではなく、printf関数経由では出力できています。
ちなみに、Visual Studio 2008のCコンパイラを使うとputchar2回でも出力できます。
検証ソース §
#include <stdio.h>
#include <ctype.h>
#include <locale.h>
int main(void)
{
printf("%s\n",setlocale( LC_ALL, NULL));
char * buffer = "あ";
putchar( buffer[0] );
putchar( buffer[1] );
printf("\n%d, %s\n",isleadbyte(buffer[0]),buffer);
printf("%s\n",setlocale( LC_ALL, ""));
putchar( buffer[0] );
putchar( buffer[1] );
printf("\n%d, %s\n",isleadbyte(buffer[0]),buffer);
return 0;
}
実行結果 §
C
あ
0, あ
Japanese_Japan.932
32768, あ