Jump to content

Recommended Posts

Posted

Boa noite pessoal, gostaria da ajuda de vocês.

Estou fazendo um código que pega informações do usuário, coloca em uma AVL e depois passa os dados dessa AVL para um arquivo. O problema é que quando igualo ou sobreponho as posições da string nome[ ] em relação a string cpf[ ] (ambas da struct "stc_Aluno"), parece haver uma invasão de memória da string nome[ ] em cima da string cpf[ ].

Por exemplo: se uso...

#define CAID 10
#define CANOME 11
#define CACPF 12

typedef struct A
{
  char id[CAID];
  char nome[CANOME];
  char cpf[CACPF];
  struct A *esquerdo, *direito;
  short altura;
}stc_Aluno;

O código consegue detectar se o CPF digitado já está na lista de dados.

Já quando coloco assim...

#define CAID 10
#define CANOME 12
#define CACPF 12

typedef struct A
{
  char id[CAID];
  char nome[CANOME];
  char cpf[CACPF];
  struct A *esquerdo, *direito;
  short altura;
}stc_Aluno;

O código não consegue detectar se o CPF digitado já está na lista de dados.

Primeiro o código vai para a função de "idAluno", depois "nomeAluno" e por final a "cpfAluno". Dentro das funções "idAluno" e "cpfAluno", há a função "compareAluno", que é responsável por identificar se o dado digitado já está contido na nossa AVL. No primeiro aluno adicionado, o código roda corretamente, já quando insiro os dados do segundo aluno, no momento da comparação de cpfs, a função ignora se o "cpf" digitado e o "cpf" que está na AVL são iguais.

Vou deixar o link do código logo abaixo, pode fazer a modificação que achar necessária e se possível, coloque aqui nesse post, o que você usou para resolver o problema. https://replit.com/join/snrbwfcatk-lucasverissimo1

  • Agradecer 1
  • Administrators
Posted

Opa, bem vindo à comunidade!

Me parece que a sua função compareAluno() tenta advinhar o que é para comparar (ID, nome ou CPF) através do tamanho da string. Isso é um problema porque tanto CANOME quanto CACPF expandem para 12, fazendo com a que na hora de comparar o CPF, a comparação do if na linha 346 retorne verdadeiro e o programa compare um CPF com um nome.

A propósito, qual o motivo de você utilizar char[] nos IDs? Se os IDs vão conter só números, podem ser do tipo int.

Abraço.

  • Agradecer 1
  • Curtir 1
Posted
1 hora atrás, Fernando Mercês disse:

Opa, bem vindo à comunidade!

Me parece que a sua função compareAluno() tenta advinhar o que é para comparar (ID, nome ou CPF) através do tamanho da string. Isso é um problema porque tanto CANOME quanto CACPF expandem para 12, fazendo com a que na hora de comparar o CPF, a comparação do if na linha 346 retorne verdadeiro e o programa compare um CPF com um nome.

A propósito, qual o motivo de você utilizar char[] nos IDs? Se os IDs vão conter só números, podem ser do tipo int.

Abraço.

Muito obrigado, algo tão óbvio e não consegui enxergar, muito paz para você e sua família.

  • Agradecer 1
Posted
1 hora atrás, Fernando Mercês disse:

Opa, bem vindo à comunidade!

Me parece que a sua função compareAluno() tenta advinhar o que é para comparar (ID, nome ou CPF) através do tamanho da string. Isso é um problema porque tanto CANOME quanto CACPF expandem para 12, fazendo com a que na hora de comparar o CPF, a comparação do if na linha 346 retorne verdadeiro e o programa compare um CPF com um nome.

A propósito, qual o motivo de você utilizar char[] nos IDs? Se os IDs vão conter só números, podem ser do tipo int.

Abraço.

É que pensei na hipótese dos IDs serem identificadores que podem mudar, que podem um dia ter letras.

  • Agradecer 1
  • Administrators
Posted
6 horas atrás, donutLukke disse:

Muito obrigado, algo tão óbvio e não consegui enxergar, muito paz para você e sua família.

Pra você e sua família também. 🙂

6 horas atrás, donutLukke disse:

É que pensei na hipótese dos IDs serem identificadores que podem mudar, que podem um dia ter letras.

Entendi. Bom, como exercício ok, mas em geral ID é numérico, até pela velocidade de comparação. 😉

Abraço!

  • Curtir 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...