2017-04-03 1 views
-1

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); 
} 
+0

Je suis désolé de devoir vous informer que compiler correctement et ne pas fonctionner correctement est un comportement normal. – ThingyWotsit

+0

les réponses répondent précisément à ce qui ne va pas mais je pense qu'il manque l'instruction de retour –

+0

@BP vous n'avez pas besoin d'une déclaration de retour dans 'main' selon la norme C11. – JeremyP

Répondre

2

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.

2

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]

1

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].