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, "");
Foi útil?

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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top