Ir ao conteúdo
  • Cadastre-se

C snprintf e comandos que peguem os dados e transforme em string de forma generica


codigo rapido
Ir à solução Resolvido por codigo rapido,

Posts recomendados

 

 

char buffer[tamanho];
snprintf(buffer, tamanho, "%lli\t%i\t%s\t%... grande a lista...", a, b, c, d, e... muitas variaveis);


Eu tenho muitas variaveis que eu queria colocar numa string chamada buffer.
So que esses parametros como %s, %i, %lli e etc não seguem um padrão, mas eles são necessários, pelo menos para o comando snprintf.
O fwrite também tem essa obrigação? Parece que sim, e isso pra mim é um convite ao erro.... e eu sou mané... tenho aceitado o convite toda hora...

Isso é algo que pode dificultar a manutenção se o programa crescer e necessitar de uma variavel em uma posição. No meio desse tanto de letrinha tá complicado pra mim que só uso o GEdit e o gcc em linha de comando.

Existe algum comando que torne esses "%XXX" em algo "%generico" pra colocar tudo na string?

provavelmente vcs mais evoluidos que eu na linguagem utiliza algum comando ou recurso além do meu conhecimento.

Obrigado pela atenção de todos

Link para o comentário
Compartilhar em outros sites

@codigo rápido

 

 

1 hora atrás, codigo rápido disse:

So que esses parametros como %s, %i, %lli

Especificadores de formato.

O parâmetro é format, como a documentação sugere:

int snprintf(
   char *buffer,
   size_t count,
   const char *format [,
   argument] ...
);

 

1 hora atrás, codigo rápido disse:

eles são necessários, pelo menos para o comando snprintf

Função.

E sim, se são muitas variáveis, vai dar uma string de meio metro :D

 

1 hora atrás, codigo rápido disse:

No meio desse tanto de letrinha tá complicado pra mim que só uso o GEdit e o gcc em linha de comando.

Existe algum comando que torne esses "%XXX" em algo "%generico" pra colocar tudo na string?

Acho que não vale a pena, e nem sei se dá pra criar um novo especificador assim pra ser sincero, pelo menos não da forma que sugeriu :D

Quer omitir certa parte da string format na chamada da função? Pode fazer o seguinte, por exemplo:

const char* formato = "%lli\t%i\t%s\t";
char buffer[tamanho];
snprintf(buffer, tamanho, formato
         "mais alguns especificadores...",
         a, b, c, d, e... muitas variaveis);

formato e quaisquer strings lá vão ser concatenadas, e não precisa ficar tudo numa linha só.

Link para o comentário
Compartilhar em outros sites

  • Solução
1 hora atrás, Lucca Rodrigues disse:

Quer omitir certa parte da string format na chamada da função? Pode fazer o seguinte, por exemplo:

const char* formato = "%lli\t%i\t%s\t";
char buffer[tamanho];
snprintf(buffer, tamanho, formato
         "mais alguns especificadores...",
         a, b, c, d, e... muitas variaveis);

formato e quaisquer strings lá vão ser concatenadas, e não precisa ficar tudo numa linha só.


Obrigado, Lucca!

Eu sei que não existem recursos como reflection em C, mas como a linguagem é bem conhecida e relevante imagino que algo semelhante ou uma construção dinâmica seja feita pelos mais experientes. Sua sugestão já ajuda bastante. Obrigado!
Em em se tratando de umas 200 variaveis, eu terei que encontrar uma forma mais organizada e fácil de contornar minhas falhas nesse ponto.
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, codigo rápido disse:

O fwrite também tem essa obrigação? Parece que sim, e isso pra mim é um convite ao erro....

 

Não, não tem. fwrite() apenas trata o endereço de início e o total de bytes a transmitir. 

 

o f ao final de snprintf() é de formatted, e esse é o objetivo dos especificadores, essas coisas que começam por um '%'.

 

o f no início de fwrite() é de file. A família printf() tem uma dessas também, fprintf(), com um f de cada lado :) par indicar print to file, formatted.

 

Isso de especificadores está presente em C, em java, em javascript, em C++. em Python, em COBOL, e é chato mesmo. Mais ou menos chato a depender do uso.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!