Вопрос
Пока я работаю, где-то внутри кода я увидел следующие элементы.Меня сбивает с толку спецификатор формата в 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)
Другие советы
* заменяется на (int)sizeof(dec_number).Если dec_number - это значение int, то на многих машинах оно совпадает с %0.4d.Это и есть тот самый точность с помощью которого выводится целое число или максимальное количество цифр для печати.
* может появиться по обе стороны от ".", например:
sprintf(tmp_buf, "%*.*", 0, (int)sizeof(dec_number), d_number);
тоже работает.
Не связан с StackOverflow