Salut
Il y a deux problèmes majeurs :
Là,
scanf va écraser une partie de la pile.
Un pointeur est un objet situé quelque part en mémoire (ici dans la pile). Et sa valeur est une adresse... vers laquelle on peut pointer (c'est tout l'intérêt d'un pointeur).
La fonction
scanf a besoin de connaitre l'adresse où elle va écrire les données.
Or, là, tu lui envoies non pas l'adresse pointée par le pointeur, mais l'adresse du pointeur ! Du coup, elle va écraser une partie de la pile, c'est-à-dire que tu vas modifier
s (qui pointera encore n'importe où), ainsi que d'autres variables.
1 2 3 4 5
| char *s; (1)
...
scanf("%s",&s); (2)
...
puts(s); (3) |
1)
s n'est pas initialisé : il pointe n'importe où.
2) La mauvaise utilisation de
scanf ici modifie la valeur de
s... qui continuera encore à pointer n'importe où.
3) Tu veux afficher une chaine situé à une adresse bidon (i.e. : interdite)... Ca ne peut que crasher.
Partager