Logo Hardware.com.br
astronalta
astronalta Veterano Registrado
1.3K Mensagens 6 Curtidas

nao entendi estes comandos

#1 Por astronalta 14/04/2009 - 16:10
gente, logo abaixo esta o exemplo que copiei de uma apostila...

#include <stdio.h>
#include <stdlib.h>
#include <conio2.h>
#include <string.h>
int main (void)
{
char c, nome[81], sobrenome[41];
int i;

printf("Entre com um nome: &quot;
fgets(nome, 41, stdin);
nome[strlen(nome)-1] = '\0'; //tira o caracter do fim (nao entendi)
puts(nome);

printf("\nEntre com o sobrenome: &quot;
fgets(sobrenome, 41, stdin); // pq assim e nao gets(nome)????
sobrenome[strlen(sobrenome) -1] = '\0';
puts (nome);

strcat(nome, " &quot;
strcat(nome, sobrenome);
puts (nome);

printf("\nQual caracter?&quot;
c = getchar();

for (i = 0; i < strlen(nome); i++)
{
if (c == nome[i])
{
printf("\nO caractere aparece na posicao %d", i);
}
}
getch();
return 0;
}



estes trechos nao compreendi...comentei nos lugares

[php] printf("Entre com um nome: ");
fgets(nome, 41, stdin);
nome[strlen(nome)-1] = '\0'; //tira o caracter do fim (nao entendi)
puts(nome);

printf("\nEntre com o sobrenome: ");
fgets(sobrenome, 41, stdin); // pq assim e nao gets(nome)????
sobrenome[strlen(sobrenome) -1] = '\0';
puts (nome);[/php]

se alguem puder me explicar.. agradeço
zerocow
zerocow Veterano Registrado
1.7K Mensagens 17 Curtidas
#2 Por zerocow
14/04/2009 - 17:08
nome[strlen(nome)-1]  ='\0';


Adiciona o byte 'zero' no final da string (obrigatorio em todo string)

 fgets(sobrenome, 41, stdin); // pq assim e nao gets(nome)????


Bem... o fgets pega no maximo 41 bytes, o gets não!
Exemplo:

char nome[3];

fgets(nome, 3, stdin); //Digito Cara só vai gravar o 'Car', evita overflow
gets(nome); //Dito Cara, vai causar um overflow/bug no programa.


Basicamente é isso...
de uma olhada no http://www.cppreference.com/wiki/start para mais informações sobre isso.
Apenas Quem Reinventou a Roda, Sabe o porque dela ser Redonda - DevilF
trx64
trx64 Geek Registrado
2.4K Mensagens 88 Curtidas
#7 Por trx64
15/04/2009 - 12:56
astronalta disse:


O problema do gets é que ele não especifica o tamanho da string, como o fgets.

Ex.: sua string suporta 10 caracteres. Se o sujeito digitar 8, os dois jeitos irão funcionar. Se o usuário inserir 20, o fgets pega as 10 primeira e ignora o resto. O gets pega as 10 primeiras e joga o que sobrar para as próximas variáveis, enchendo as variáveis com lixo e levando seu programa a encher as variáveis com o conteúdo incorreto.

O gets não é seguro. Use sempre o fgets para strings.
Ubuntu 16.10
Jogos Linux

© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal