Спецификатор формата C - PullRequest
       19

Спецификатор формата C

5 голосов
/ 08 февраля 2010

Пока я работаю, где-то внутри кода я увидел следующие записи. Меня смущает спецификатор формата в sprintf

   d_number = strtol( tmp_buf , (char **)NULL, 16);
   memset( tmp_buf , ' ' , sizeof( tmp_buf ) );
   sprintf( tmp_buf , "%0.*d" , (int)sizeof( dec_number ) , d_number  );

Может кто-нибудь объяснить, пожалуйста?

Ответы [ 2 ]

6 голосов
/ 08 февраля 2010

.* означает, что точность указана не в строке формата, а в качестве дополнительного целочисленного аргумента, предшествующего аргументу, который должен быть отформатирован. (D_number)

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

0 голосов
/ 08 февраля 2010

* заменяется на (int) sizeof (dec_number). Если dec_number - это int, на многих машинах он равен% 0.4d. Это точность , с которой нужно напечатать целое число или максимальное количество цифр для печати. ​​

Знак * может появляться с любой стороны от ".", Например:

sprintf(tmp_buf, "%*.*", 0, (int)sizeof(dec_number), d_number);

тоже работает.

...