Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

K3nshin

[Resolvido] Fgets oO

Recommended Posts

Li numa pagina de internet falando o seguinte :

 

A função strlen() retorna o comprimento da string fornecida. O terminador nulo não é contado. Isto quer dizer que, de fato, o comprimento do vetor da string deve ser um a mais que o inteiro retornado por strlen().

 

So q estou usando fgets conforme essa orientação :

 

Nunca use gets().

Porque é impossível saber, sem conhecer antecipadamente os dados, quandos caracteres gets() vai ler, e porque gets() vai continuar a guardar caracteres ultrapassado o fim do 'buffer'.

gets() é uma função extremamente perigosa de usar. Este comportamento tem sido utilizado para quebrar a segurança de computadores.

 

Fiz meu programa em cima dessas orientações sendo q o strlen sempre esta me retornando uma quantidade (+1) a mais q a minha palavra e o meu system pause esta aparencendo muito longe do meu printf sendo q nao to usando um monte de \n segue o codigo :

 

Alguem sabe o q esta acontecendo ????

 

/*14.Leia uma frase de no máximo 50 caracteres e remova todos os espaços em branco
	da mesma. Considere que entre duas palavras, no início ou no final da frase 
	podem ocorrer mais de um branco.*/
	
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define tamanho 50

void preencher (char *ppalavra);

main()
{
  char palavra[tamanho];  //string de caracter
  
  preencher(palavra);
  

system("pause");	   
}

void preencher(char *ppalavra)
{
  int tampalavra=0;		 //recebe o tamanho da palavra
  int i,j;						  //indice do for
	   
	   //preenchendo a string
	   
	   printf("Palavra   .: ");
	   fgets(ppalavra,50,stdin);  
	   
	   //pegando o tamanho da string
	   
	   tampalavra = strlen(ppalavra);
	   printf("Palavra   .: %d\n",tampalavra);
	  
	   //percorrendo atras de espaço em branco
	  
		for (i=0;i<tamanho;i++)
	   {
		 if (ppalavra[i] == ' ')
		 {
		   for(j=i;j<tampalavra;j++)
		   {
			 ppalavra[j] = ppalavra[j+1]; 
		   }
		 } 
	   }
	   printf("Nova Frase.: %s\n",ppalavra);
}//fim da função

Compartilhar este post


Link para o post
Compartilhar em outros sites

fgets para de ler em 4 situações:

 

- Quando um erro ocorrer.

- Quando encontrar o caracter de nova linha '\n'.

- Quando o número de caracteres - 1 for atingido.

- Quando encontrado EOF.

 

O caracter \n fará parte da string se for encontrado.

Nesse caso voce deve proceder como o Beraldo disse.

Pode ser feito assim:

 

string[strlen(string) - 1] = '\0';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser feito assim:

 

string[strlen(string) - 1] = '\0';

você pode me mostra como utilizo isso no codigo pois inseri ele no meu programa e nao consigo compilar :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, tu quer substituir o último caracter da string lida com fgets.

Então deve usar esse comando logo após a instrução de leitura.

Além disso deve usar as variáveis declaradas em seu programa.

 

printf("Palavra   .: ");
	   fgets(ppalavra,50,stdin); 
	   ppalavra[strlen(ppalavra) - 1] = '\0';

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.