Нет
Это неверно. табличная печать "% 8s" дополняется до 8 пробелов, как в приведенном примере. Это не усекает. ISOC99. Если это только Windows, хорошо, MS игнорирует мир во многих вещах. Если длина строки длиннее табуляции, печатается полная строка. См:
int main()
{
char tmp[]="123456789";
printf("1 %1s\n", tmp);
printf("2 %2s\n", tmp);
printf("4 %4s\n", tmp);
printf("8 %8s\n", tmp);
printf("16 %16s\n", tmp);
printf("32 %32s\n", tmp);
return 0;
}
вывод из gcc 3.4.2 на Solaris 5.9:
> ./a.out
1 123456789
2 123456789
4 123456789
8 123456789
16 123456789
32 123456789
sprintf () дублирует и усекает строку, после чего ее можно отправить в printf. Или, если вас не волнует исходная строка:
char * trunc(char *src, int len)
{
src[len]=0x0;
return src;
}
Ссылки: МЕЖДУНАРОДНЫЙ СТАНДАРТ © ИСО / МЭК ИСО / МЭК 9899: TC2, WG14 / N1124 Проект комитета - 6 мая 2005 г.