funçoes fscanf e fgets [RESOLVIDO]

1. funçoes fscanf e fgets [RESOLVIDO]

NICHOLAS
p0w3llx

(usa Debian)

Enviado em 26/07/2015 - 20:18h

Qual das duas é mais usada?
Alguma tem problemas de segurança?
É inviavel usar alguma delas?
Quando usar cada uma?



  


2. Re: funçoes fscanf e fgets

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/07/2015 - 22:15h

fgets() serve para ler linhas de texto. fscanf() serve para verificar se dados de entrada seguem um determinado formato (e eventualmente obter valores para variáveis do programa a partir de partes desses dados formatados).

Bem usadas, nenhuma das duas funções é traz riscos de segurança. O problema é que usar realmente BEM as funções da família de scanf() dá mais trabalho do que pode parecer à primeira vista: é preciso ter cuidado com limites de dados e tamanhos de strings, e é de suma importância saber o que fazer caso os dados recebidos não estejam de acordo com o padrão de dados esperado.

A pergunta sobre qual das duas é mais usada é algo a que eu não sei responder de modo global, mas que respondo por mim com base em algo que disse acima. É muito fácil a recuperação de erro quando se lê de linha em linha. E, depois de lida uma linha inteira, pode-se usar sscanf() para extrair dessa linha as partes desejadas a posteriori.


3. Re: funçoes fscanf e fgets [RESOLVIDO]

NICHOLAS
p0w3llx

(usa Debian)

Enviado em 26/07/2015 - 22:43h


Muito obrigado! De facto esclareceu a duvida!


4. Re: funçoes fscanf e fgets

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/07/2015 - 08:51h

Eu falei em termos de se fazer um bom uso das funções. Sendo mais específico, ambas permitem modificar dados na memória em posições arbitrárias, dadas pelo usuário. Caso o usuário cometa um erro a respeito do endereço ou da quantidade de posições consecutivas da memória que podem ou que serão usadas na hora de pôr os dados, a integridade do programa pode ser comprometida.

Mas eu não creio que se possa dizer que isso caracteriza uma falha de segurança das funções. É uma característica da linguagem C requerer do usuário trabalhar com ponteiros e ser explícito sobre endereços de início e quantidade de elementos.

Tanto fgets() quando as funções da família de scanf() oferecem mecanismos para limitar a quantidade de caracteres lidos para dentro de um string. Se o programador os usa mal (ou não os usa, no cado da família de scanf()), não é por falha de projeto das funções, mas por erro cometido pelo programador.

Isso é bem diferente da falha da (agora finalmente falecida) gets(). Essa, sim, tinha uma falha de projeto: o usuário simplesmente não tinha como impor um limite à quantidade de caracteres lidos por essa função.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts