problems with strcat

fread (Record, sizeof (char), tamanhoRegistro, file);
printf ("Registry:% s  n", Registry);
rewind (file);
fread (NOME_CHAVE, sizeof (char), 3, file);
while (z <sizeof (NAME_CHAVE))
{
ch = NAME_CHAVE[z];
ch = toupper (ch);
NOME_CHAVE[z] = ch;
z ++;
}
printf ("% s  n", NOME_CHAVE);
fseek (file, 41, SEEK_SET);
printf ("HI  n");
fread (MAT_CHAVE, sizeof (char), 5 files)];



strncat (reg.chavePrimaria, NOME_CHAVE, 3);
strncat (reg.chavePrimaria, MAT_CHAVE, 5);
puts (reg.chavePrimaria);

I am writing a code to read the records in a file
I have created a structure and in it has a key char typePrimaria[8], I'm wanting to concatenate 2 strings read in the file for that size 8 vector
I would like the output to be CAR68529 concatenating a chain of size 3 and another of size 5, but in the output these chains are mixed and giving the following output:

Registration: Carlos Dias Takase 62364 IN A
CAR
62364
KeyPrimary: 64R62364

Does anyone know how to solve?