
		EnzoFerber
		
		(usa FreeBSD)
		
		Enviado em 01/11/2016 - 23:00h 
		dausterbarbosaaa escreveu:
mas para que serve exclusivamente o sscanf? 
Olá, boa noite.
A resposta do 
paulo1205 é excelente e esclarece tudo o que há para ser esclarecido.
O que posso oferecer além, a título de exemplo, é a assinatura da função, um código simples e um (simples) caso de uso.
API ( https://linux.die.net/man/3/sscanf ):
#include <stdio.h>
int sscanf(const char *str, const char *format, ...);
 
Assinatura simples. 
str é um ponteiro para 
char (uma 
string). 
format é uma 
string de formato, obedecendo a mesma sintaxe de 
scanf(). 
... (três pontos) é a forma de dizer que a função toma argumentos variáveis (tenho um artigo aqui no VoL sobre funções variádicas, se interessar). 
Código de exemplo:
 
#include <stdio.h>
int main(void)
{
	int a, b, c;
	char d, e;
	char *str = "1 2 3 x y";
	sscanf(str, "%d %d %d %c %c", &a, &b, &c, &d, &e);
	printf("a: %d\n", a);
	printf("b: %d\n", b);
	printf("c: %d\n", c);
	printf("d: %c\n", d);
	printf("e: %c\n", e);
	return 0;
}
 
Saída do programa:
$ ./sscanf
a: 1
b: 2
c: 3
d: x
e: y
 
Casos de uso:
Pois bem. A família de funções 
scanf é uma das mais complexas da 
libc. Infelizmente, elas não são recomendadas para uso direto com strings de entrada de usuários. Usuários não seguem padrões, e essas funções são essencialmente dependentes de padrões. Qualquer desvio e seu programa será interrompido.
Essas funções normalmente não são usadas em produção. Quando são, são usadas em casos específicos onde uma entrada 
padronizada é garantida. Por exemplo, suponha que seu programa leia um arquivo de configuração quando inicia. Suponhamos também que os administradores que o usarão irão ler o manual. Portanto, você terá uma entrada bem padronizada, e poderá mapear o arquivo com 
mmap e então usar 
sscanf para ler todas as variáveis.
Alguns programadores usam como reconhecimento condicional em strings construídas dinamicamente (o que não recomendo, variáveis de estado são melhores...).
Infelizmente, se você não esclarecer melhor o que quer saber sobre a 
sscanf não dá pra falar muita coisa. O que vai te esclarecer muita coisa é o manual:
man sscanf
 
Espero ter ajudado,
Enzo Ferber
[]'s
 
$ indent -kr -i8 src.c
"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right." 
        - linux/Documentation/CodingStyle - TORVALDS, Linus.