Cada especificação de conversão na seqüência de formato é introduzida pelo caractere %, após o qual as informações seguintes aparecem em seqüência:
Zero ou mais sinalizadores (em qualquer ordem), que modificam o significado das especificações de conversão, conforme descrito na próxima seção.
Uma largura de campo mínima ótima. Se o valor convertido tiver menos bytes que a largura do campo, o valor será preenchido com espaços à esquerda, por padrão, ou à direita, se o sinalizador de ajuste esquerdo (-) for especificado. A largura do campo também pode ser especificada como um asterisco (*), nesse caso, a largura do campo é definida dinamicamente com base no valor de um argumento adicional do tipo int.
Uma precisão opcional que indica o número mínimo de dígitos que aparecem nas conversões d, i, o, u, x e X (o campo é preenchido com zeros à esquerda); o número de dígitos que aparecem após o caractere fracionário das conversões e, E e f, o número máximo de dígitos significativos das conversões g e G; ou o número máximo de bytes a serem impressos de uma seqüência pela conversão s. A precisão toma o formato de um ponto (.) seguido por um asterisco ( *), descrito abaixo, ou uma seqüência de dígito decimal.
Uma seqüência opcional de prefixos de tamanho que indica o tamanho do argumento correspondente, descrito em Prefixos de tamanho. Os prefixos de tamanho não são necessários em D e são fornecidos para compatibilidade com a função printf() de C.
Um especificador de conversão que indica o tipo de conversão a ser aplicado ao argumento.
A função printf(3C) também aceita as especificações de conversão do formato % n$ onden é um inteiro decimal. A printf() do DTrace não aceita este tipo de especificação de conversão.