#include <ctype.h>
#include <stdio.h>
#include <locale.h>
int main()
{
int c;
setlocale(LC_CTYPE, "");
while ((c = fgetc(stdin)) != EOF)
printf("0x%x %d\n", c, isspace(c));
return 0;
}
でもって
$ ./a.out
しゅ
0xe3 0
0x81 0
0x97 0
0xe3 0
0x82 0
0x85 0
0xa 1
なわけですが、LC_CTYPEがUTF-8だと
$ LANG=ja_JP.UTF-8 ./a.out
しゅ
0xe3 0
0x81 0
0x97 0
0xe3 0
0x82 00x85 1
0xa 1
「ゅ」の最後のバイトが空文字と判定されてしまうと。
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/isspace.3.html
(FreeBSDのマニュアルと同じだ。FreeBSDでのisspaceの挙動も同じ。)
マルチバイト文字ロケールでUTF-8文字列をisspaceに突っ込むな or LC_CTYPE="C"でisspaceを呼ぶべし、でしょうか。