Pourquoi ce code compile-t-il mais ne fonctionne pas?Pourquoi ce code compile-t-il mais ne fonctionne pas
int main() {
char *s;
scanf("%15s", s);
puts(s);
}
Pourquoi ce code compile-t-il mais ne fonctionne pas?Pourquoi ce code compile-t-il mais ne fonctionne pas
int main() {
char *s;
scanf("%15s", s);
puts(s);
}
Parce que s
est un pointeur non initialisé, vous ne pouvez pas y stocker des données (car il « n'y a pas là là »).
Essayez:
char s[32];
à la place, qui vous donne 32 la valeur des personnages de la pièce dans laquelle scanf()
peut écrire.
Vous devez fournir de la mémoire pour scanf(...)
Le char *s
est seulement un pointeur vers de la mémoire, mais pas la mémoire elle-même. Vous pouvez malloc(...)
la mémoire et ont s
point de lui, ou d'affecter localement sur la pile par char s[16]
Pour commencer, fournir un tampon approprié à l'appel scanf
. Par exemple, au lieu de char *s
qui est simplement un pointeur non initialisé, essayez char s[128]
.
Je suis désolé de devoir vous informer que compiler correctement et ne pas fonctionner correctement est un comportement normal. – ThingyWotsit
les réponses répondent précisément à ce qui ne va pas mais je pense qu'il manque l'instruction de retour –
@BP vous n'avez pas besoin d'une déclaration de retour dans 'main' selon la norme C11. – JeremyP