Ir ao conteúdo

Posts recomendados

Postado

Boa Noite. To fazendo um mini programa, para perguntar o nome do cliente, o endereco, o cpf e depois imprimir. Porém, na hora de imprimir ele não mostra o nome do cliente... Alguém poderia me ajudar? Abaixo está meu código:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char nome[30], cpf[11], endereco[30];


  printf("Nome do Cliente: \n");
    gets(nome);

    system("cls");


  printf("Endereco do cliente: \n");
    gets(endereco);


    system("cls");


  printf("CPF do cliente: \n");
    gets(cpf);


    system("cls");


  printf("Cliente: %s\n", nome);

  printf("CPF: %s\n", cpf);

  printf("Endereco: %s\n", endereco);


    system("pause");

    return 0;
}

 

Aqui está o problema: 

image.png.36e582e9cc3c74b9249b7dc4fe9e2f52.png

 

Postado

rsrsr :)

 

A culpa é dos limites das strings. Então a ordem em que as variáveis são declaradas não é a mesma em que elas são alocadas na memória.

 

Ordem da declaração: NOME, CPF, ENDERECO

Ordem da alocação: ENDERECO, CPF, NOME.

 

É conhecido que uma string tem o tamanho igual à quantidade de caracteres não nulos +1.

Para guardar o CPF seu o vetor precisa de tamanho igual a 12: suficiente para os 11 caracteres e o nulo ('\0') que é o último byte da string.

 

'0''4''7''3''1''7''2''1''0''0''0''\0' Total 12, mas o espaço reservado é 11. Ora! Para onde foi o '\0'? Sabe dizer?

Spoiler

O caractere nulo, final de CPF reescreve o primeiro caractere em NOME que na memória se localiza depois de CPF. .

 

  • Curtir 1
Postado

@Brian Motta

Como o colega @mauro_b disse, você precisa deixar espaço para o caractere nulo quando for declarar a string.

Com gets() você só terá problemas, como pôde observar. Não há uma forma de limitar a quantidade de caracteres para serem lidos.

Eu já postei aqui no fórum sobre fgets(), você pode dar uma olhada:

 

Aliás, não use system(), é perigosa e não vai aprender nada com ela.

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!