retour de valeur bizarre - C - Programmation
Marsh Posté le 07-02-2015 à 04:41:37
A mon avis, la raison est trop peu d'espace est alloué au mot nombre.
Si tu fait :
Code :
|
T'as plus de chance d'y mettre une grande tomate.
Marsh Posté le 07-02-2015 à 10:40:19
> char nombre [] = "a,a,a,a,a,a,a,a,a";
17 caractères plus le \0 final => nombre a une taille de 18, et une taille mémoire de 18 lui est réservée
> printf("votre mot svp ? :\n" );
> scanf ("%s",nombre);
Maintenant, on change le contenu de nombre par celui de la chaîne tapée en entrée. Si celle ci (en comptant le \0 final) dépasse les 18 caractères, ça déborde et écrit n'importe ou en zone mémoire, par exemple, sur la zone réservée à stocker la valeur de test.
Le compilateur n'a pas de moyen de vérifier que ce qui va être entré va être de la bonne taille, mais à l'exécution, il pourrait y avoir des options de compilation qui font planter le programme dès que celui ci essaye d'écrire une valeur de variable en dehors de la zone mémoire qui lui a été réservée.
> char *nombre[1024];
Non! c'est char nombre[1024]; que vous vouliez taper je suppose.
A+,
Marsh Posté le 13-02-2015 à 20:09:15
ouai, effectivement il y a eu un overflow, au début j'avais pas compris mais en ce moment je regarde les vidéos youtube de richard juan sur l'assembleur et tous s'explique. Adressage mémoire, byte word dword etc...
Avec l'assembleur tous deviens plus claire, les langage de haut niveau nous empêches de comprendre certaine subtilités (sauf le C peut être)
Marsh Posté le 07-02-2015 à 01:59:47
bonsoir,
je testais un truc sur ce code
quand je rentre le mot tomate printf me retourne bien 1 par contre quand je rentre tomaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaate printf me retourne 1952538977 ??? quelqu'un aurait t'il une explication ?
thanks