donutLukke Posted January 4, 2023 Posted January 4, 2023 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 1 Quote
Administrators Fernando Mercês Posted January 5, 2023 Administrators Posted January 5, 2023 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. 1 1 Quote
donutLukke Posted January 5, 2023 Author Posted January 5, 2023 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. 1 Quote
donutLukke Posted January 5, 2023 Author Posted January 5, 2023 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. 1 Quote
Administrators Fernando Mercês Posted January 6, 2023 Administrators Posted January 6, 2023 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! 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.