However, it appears that glibc's printf
code interprets the parameter as the number of *characters* to print, and to determine what's a character it assumes the string is in the environment LC_CTYPE's encoding.
Well, I myself have problems to believe that :-) This would be nasty... Are you sure? I couldn reproduce that. I made a quick test, passing a utf-8 encoded string (5 bytes correspoding to 4 unicode chars: "niño") And my glib (same Fedora 12) seems to count bytes, as it should. #include<stdio.h> main () { char s[] = "ni\xc3\xb1o"; printf("|%.*s|\n",5,s); } This, compiled with gcc 4.4.3, run with my root locale (utf8) did not padded a blank. ie it worked as expected. Hernán