K3nshin 0 Denunciar post Postado Novembro 18, 2008 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
Beraldo 864 Denunciar post Postado Novembro 18, 2008 fgets() adiciona uma quebra de linha ('\n') no fim da string Por isso aparece um caractere a mais. Para removê-lo, basta mudá-lo para '\0' Compartilhar este post Link para o post Compartilhar em outros sites
K3nshin 0 Denunciar post Postado Novembro 18, 2008 Para removê-lo, basta mudá-lo para '\0' ¿¿¿ Muda-lo aonde ??? :unsure: ¿¿¿ em qual parte do programa ??? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Novembro 18, 2008 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
K3nshin 0 Denunciar post Postado Novembro 18, 2008 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
Kandrade 7 Denunciar post Postado Novembro 18, 2008 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
K3nshin 0 Denunciar post Postado Novembro 18, 2008 Muito obrigado Kandrade problema resolvido valeu http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Novembro 18, 2008 Foi nada. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Muito obrigado Kandrade problema resolvido valeu http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites