Por que 'printf'% s ”'concatena as duas sequências juntas? [duplicado]

10
$ printf "%s" a b
ab$ printf "%s%s" a b
ab

Eu tenho algum problema para entender o especificador de formato para printf . Se eu estiver correto, é basicamente o mesmo que para strings na linguagem de programação C.

Por que o especificador de formato %s concatena as duas sequências a seguir juntas?

Por que %s não significa que há apenas uma string para substituí-la e ignorar a string restante?

Por que os resultados de duas strings sob %s e %s%s são iguais?

    
por Ben 24.11.2018 / 13:42

2 respostas

14

Isso é como printf é especificado para se comportar :

The format operand shall be reused as often as necessary to satisfy the argument operands. Any extra b, c, or s conversion specifiers shall be evaluated as if a null string argument were supplied; other extra conversion specifications shall be evaluated as if a zero argument were supplied. If the format operand contains no conversion specifications and argument operands are present, the results are unspecified.

No seu caso, o formato %s é repetido quantas vezes forem necessárias para lidar com todos os argumentos.

printf "%s" a b

e

printf "%s%s" a b

produz o mesmo resultado, porque no primeiro caso, %s é repetido duas vezes, o que equivale a %s%s .

    
por 24.11.2018 / 13:54
7

Se você fornecer mais parâmetros para printf do que a string de formato espera, a string de formato será repetida.

Por exemplo

$ printf "%s -- %s" a b c d e
a -- bc -- de -- 

Podemos ver que o formato %s -- %s é efetivamente repetido.

Isso pode ser útil; por exemplo, para formatar

$ printf "%s -- %s\n" a b c d e
a -- b
c -- d
e -- 
    
por 24.11.2018 / 13:55

Tags