Ci-dessous est une fonction d'un programme:Chaînes concaténées sur une autre sans assignation, pourquoi est-ce?
//read the specified file and check for the input ssn
int readfile(FILE *fptr, PERSON **rptr){
int v=0, i, j;
char n2[MAXS+1], b[1]=" ";
for(i=0; i<MAXR; i++){
j=i;
if(fscanf(fptr, "%c\n%d\n%19s %19s\n%d\n%19s\n%d\n%19s\n%19s\n%d\n%d\n%19s\n\n",
&rptr[j]->gender, &rptr[j]->ssn, rptr[j]->name, n2, &rptr[j]->age,
rptr[j]->job, &rptr[j]->income, rptr[j]->major, rptr[j]->minor,
&rptr[j]->height, &rptr[j]->weight, rptr[j]->religion)==EOF) {
i=MAXR;
}
strcat(rptr[j]->name, b);
//strcat(rptr[j]->name, n2);
if(&rptr[MAXR]->ssn==&rptr[j]->ssn)
v=j;
}
return v;
}
la ligne est commenté comme ça parce que pour une raison quelconque le tableau « b » contient la chaîne « n2 » en dépit d'une évidente absence d'une cession. Cela se produit avant le premier appel Strcat, mais après/pendant l'appel fscanf.
atteint le but souhaité, mais pourquoi n2 est-il concaténé sur la fin de b, en particulier lorsque b ne dispose que d'un espace réservé pour 1 élément de tableau?
Voici un extrait de définitions de variables après l'appel fscanf:
*rptr[j]->name = "Rob"
b = " Low"
n2= "Low"
b n'est pas terminé avec un caractère nul ... il n'a de place que pour un caractère ... un espace ... il y a probablement du contenu parce que vous avez débordé un tampon. – forsvarir