Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2744 connectés 

  FORUM HardWare.fr
  Programmation
  C

  retour de valeur bizarre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

retour de valeur bizarre

n°2250287
lampadaire​91
Posté le 07-02-2015 à 01:59:47  profilanswer
 

bonsoir,
 
je testais un truc sur ce code
 

Code :
  1. # include <stdio.h>
  2. int main ()
  3. {
  4. int test = 1;
  5.     char nombre [] = "a,a,a,a,a,a,a,a,a";
  6. printf("votre mot svp ? :\n" );
  7. scanf ("%s",nombre);
  8. printf("bonjour votre mot est %s et j'affiche le nomre %d \n",nombre,test);
  9. system("pause" );
  10. return;
  11. }


 
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

mood
Publicité
Posté le 07-02-2015 à 01:59:47  profilanswer
 

n°2250289
par l'anne​au de l'ia
word master
Posté le 07-02-2015 à 04:41:37  profilanswer
 

A mon avis, la raison est trop peu d'espace est alloué au mot nombre.
 
Si tu fait :

Code :
  1. char *nombre[1024];


 
T'as plus de chance d'y mettre une grande tomate.


---------------
Toute expression prend un sens spirituel qui nous influence dans notre quête de l'Homme.
n°2250302
gilou
Modérateur
Modzilla
Posté le 07-02-2015 à 10:40:19  profilanswer
 

> 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+,


Message édité par gilou le 07-02-2015 à 10:46:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2250305
antac
..
Posté le 07-02-2015 à 11:24:32  profilanswer
 

Ah les joies de la gestion mémoire du C :)

n°2250829
lampadaire​91
Posté le 13-02-2015 à 20:09:15  profilanswer
 

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)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  retour de valeur bizarre

 

Sujets relatifs
Erreur bizarre dans VS2013 Express (resolu)[Resolu][VBA]pointeur sur une sous-feuille dans un sous formulaire
[resolu] retour à la ligne et ajax/CKEditorTester la valeur d'un champ avec onchange
j'ai un message bizarre dans mon resultat !!!Valeur de variable aléatoire / intervalle de temps
Affecter à une variable la valeur d'un include[VBA] Recherche d'une valeur variable dans une autre feuille
Savoir si une valeur appartient à un intervaleChaner le résultat d'une valeur dans array par une image
Plus de sujets relatifs à : retour de valeur bizarre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR