Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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çãoCarregando comentários...