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 a quantidade de caracteres 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[ ].
Ao adicionar um aluno, o caminho que o código faz pelas funções é:
char* idAluno(stc_Aluno *a, int opcao);
int compareAluno(stc_Aluno **a, char variavel[ ]);
char* nomeAluno(stc_Aluno *a);
int compareAluno(stc_Aluno **a, char variavel[ ]);
char* cpfAluno(stc_Aluno *a, int opcao);
int compareAluno(stc_Aluno **a, char variavel[ ]);
adicionaAluno(student, aluno.id, aluno.nome, aluno.cpf);
salvarAluno(&student);
Quando uso essa configuração abaixo, o código funciona corretamente, conseguindo detectar que o CPF digitado já existe na lista de dados (imagem 1):
typedef struct A
{
char id[CAID];
char nome[CANOME];
char cpf[CACPF];
struct A *esquerdo, *direito;
short altura;
}stc_Aluno;
Já quando uso essa configuração abaixo, o código funciona incorretamente, não conseguindo detectar que o CPF digitado existe na lista de dados (imagem 2):
typedef struct A
{
char id[CAID];
char nome[CANOME];
char cpf[CACPF];
struct A *esquerdo, *direito;
short altura;
}stc_Aluno;
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