Eu tenho um trecho de código no qual há um
printf("%.*s\n")
o que isso %.*s
significa?
c
printf
format-specifiers
Shaobo Wang
fonte
fonte
printf
chamada válida .Respostas:
Você pode usar um asterisco (
*
) para passar o especificador de largura / precisão paraprintf()
, em vez de codificá-lo na string de formato, ou seja,fonte
str_len
argumento deve ter tipoint
(ou tipo integral mais estreito, que seria promovido aint
). Seria um erro para passarlong
,size_t
etc.%s
, é imprimir uma sub-string da string original. Nesse caso de uso,str
apontaria para algum lugar dentro da string original (possivelmente no início) estr_len
especificaria o comprimento da substring que deve ser impressa.Mais detalhado aqui .
Então, se tentarmos as especificações de conversão
obtemos a saída:
fonte
Não acho que o código acima esteja correto, mas (de acordo com esta descrição
printf()
) os.*
meiosPortanto, é uma string com uma largura aceitável como argumento.
fonte
int
(ou um subconjunto dele) - não apenas qualquer valor integral como mais intuitivosize_t
ou seus possíveis aliases, comostd::string::size_type
. Isso é ainda mais confuso, levando em consideração que a página referenciada é mencionadasize_t
como um dos especificadores de tipo suportados.Veja: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
fonte