Re: [Comm] А я тут багу в printf(3) нашел :-) (take two)

Alexey Starinsky staa-at-tavrida-dot-com
Вт Июл 15 17:43:48 MSD 2003


Здравствуйте, Alexey,

Не далее как 15 июля 2003 г., 12:54:35, Вы написали:

AM> Выдержка из man 3 printf (секция the field width):

AM> Instead of a decimal  digit  string one may write `*' or `*m$' (for some 
AM> decimal integer m) to specify that the field width is given in the next 
AM> argument, or in the m-th argument, respectively, which must be of type int.

AM> Внимание, вопрос:

AM> что согласно этой доке напишет

AM> printf("%0*d %d %d %d\n", 2, 4, 8, 16);
AM> printf("%0*1$d %d %d %d\n", 2, 4, 8, 16);
AM> printf("%0*2$d %d %d %d\n", 2, 4, 8, 16);

AM> ?

AM> Полученный мной результат меня несколько удивил (в первую очередь, своей 
AM> нелогичностью). Что самое смешное, этот  результат совпадает на Linux 
AM> (glibc-2.2.6), FreeBSD (4.8-STABLE) и MS Windows 2000 (MS VC++ 6). Я так 
AM> понимаю, пора заполнять lawsuit "SCO против всех", в котором говорить, что 
AM> printf украден, потому что совместим по багам :-).

AM> P.S. Но в MSDN, по крайней мере, дока про '*' соответствует истине ('*m$' не 
AM> задокументирован вовсе)

Мда... попробовали.
И правда, фигня какая-то :)
Задумались...

-- 
С уважением,
Алексей Старинский                         mailto:staa -at- tavrida -dot- com




Подробная информация о списке рассылки community