O que faz o formato% * s especificador média?
-
05-07-2019 - |
Pergunta
Em algum código que eu tenho que manter, eu vi um formato especificador %*s
. Alguém pode me dizer o que é isso e por que ele é usado?
Um exemplo de seu uso é semelhante:
fprintf(outFile, "\n%*s", indent, "");
Solução
É usado para especificar, de forma dinâmica, o que a largura do campo é :
- A largura não é especificado na cadeia de formato, mas como um adicional argumento valor inteiro que precede o argumento que tem de ser formatado.
tão especifica "indent" quanto espaço para alocar para a cadeia que se segue na lista de parâmetros.
Assim,
printf("%*s", 5, "");
é o mesmo que
printf("%5s", "");
É uma boa maneira de colocar alguns espaços no seu arquivo, evitando um loop.
Outras dicas
Não use "% * s" em um tampão que não é NULL terminada (embalado) pensando que ele vai imprimir único campo "comprimento".
http://www.cplusplus.com/reference/clibrary/cstdio/ printf /
A largura não é especificado na cadeia de formato, mas como uma discussão valor inteiro adicional que precede o argumento de que tem que ser formatado.
por exemplo:. printf("%*s", 4, myValue);
é equivelant para printf("%4s", myValue);
O especificador de formato% 4s saídas uma String em uma largura de campo de 4-isto é, printf exibe o valor com pelo menos 4 posições de caracteres.
Se o valor a ser saída é less
de 4 posições de caracteres de largura, o valor é right justified
no campo por padrão.
Se o valor for greater
de 4 posições de caracteres de largura, o expands
largura do campo para acomodar o número de caracteres adequado.
Para a esquerda justificar o valor, use um inteiro negativo para especificar a largura do campo.
Referências: Java ™ Como programar (início objetos), Décima Edição
* faz com que a almofada fprintf a saída até que seja n caracteres de largura, em que n é um valor inteiro armazenado no argumento de uma função apenas anterior que representada pelo tipo modificado.
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.