Вопрос

Пока я работаю, где-то внутри кода я увидел следующие элементы.Меня сбивает с толку спецификатор формата в 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  );

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

Это было полезно?

Решение

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

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

Другие советы

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

* может появиться по обе стороны от ".", например:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top