#include <stdlib.h>
#include <stdio.h>
int main ()
{
int numero_client = 1234;
int argent_client = 12;
char nom_client[4];
printf("Veuillez entrer votre nom :");
scanf("%s", nom_client);
printf("Vous disposez d'un crédit de %d euros%", argent_client);
return EXIT_SUCCESS;
}
Pour un 32 bits (PC) la zone mémoire est rangé comme suit:
NOM_CLIENT = 4 octets | ARGENT_CLIENT = 4octers | NUMERO_CLIENT = 4 octers (on est sur un PC en général avec la norme BIG ENDIAN (ou LITTLE en fait, je confond toujours, mais la mémoire est rangé dans l'ordre inverse))
Ainsi, si on écrit la chaine "aaaa", elle est en réalité de 5 octers car elle finit par le caractère \0, ainsi, l'argent client va valoir 0 car on aura écrasé cette zone mémoire et la programme affichera qu'on a un crédit de 0€.
Si on entre "aaaaaaaa", on va se retrouver avec une somme bcp plus interessante...
Pour éviter ce type de faille dans ce cas ci, il faut écrire: scanf("%4s"..... et il n'y aura plus d'écrasement mémoire