empiler autour de la variable ... a été corrompu
J'ai une fonction simple qui écrit des données dans un nouveau fichier. Il fonctionne, et le fichier est écrit, mais j'obtiens l'erreur mentionnée ci-dessus pendant le débogage dans MSVS Express 2013.
void writeSpecToFile(const char *fname); //in header file.
char myChar [20];
sprintf(myChar, "aa%03daa%daa", i1, i2);
const char* new_char = myChar;
writeSpecToFile(myChar);
Comme on le voit, j'ai simplement insérer des variables dans une chaîne de caractères en utilisant sprintf (fonctionne très bien). Maintenant si je passe myChar ou new_char, il me donne toujours l'erreur de corruption.
Ce qui s'est passé?
source d'informationauteur student1
Vous devez vous connecter pour publier un commentaire.
Pourquoi avez-vous déclarer votre tampon de caractères d'une taille de 20? Plus que probablement, la
sprintf
placé plus de caractères que qui peut s'adapter à myChar.Au lieu de cela, utiliser
Si vous allez le long de la "suppose que la plus grande taille de mon tableau"
la route, la dernière chose que vous voulez faire est de tenter de compter, à droite vers le bas
le dernier caractère, quelle taille pour faire le tampon. Si vous êtes à pied par un seul octet, qui peut provoquer une panne.
En supposant 32 bits
int
l'impression qu'un avec%d
donnera un maximum de 8 caractères visibles.Votre chaîne de formatage contient également 6 littérale
a
-caractères, et nous ne devons pas oublier le 0-terminator.Dans l'ensemble:
2*8+6+1 = 23 > 20
!!Votre tampon doit être d'au moins 23 octet gros, moins il y a d'autres non divulgué d'entrée-restrictions.
Personnellement, je voudrais lui donner un round 32.
Aussi, de mieux utiliser les
snprintf
et éventuellement vérifier la chaîne n'a effectivement bon (si elle ne vous convient pas obtenir un raccourcissement de la chaîne, donc pas de catastrophe).Attention, la mise en œuvre de Microsoft est non conforme et ne garantie pas 0-la résiliation.