Ceci est un code vraiment étrange avec un comportement indéfini. Qu'attendez-vous de ceci:
int n; // No value!
int str[n];
A faire? Vous obtenez un tableau dont la longueur est inconnue car n
n'a aucune valeur au moment de la déclaration str
.
Si vous attendiez le compilateur « temps Voyage » retour à la str[n]
ligne comme par magie quand n
est donnée une valeur par scanf()
, alors ... ce n'est pas comment Co fonctionne, et vous devriez vraiment lire sur l'une des langues un peu plus. Et compiler avec tous les avertissements que vous pouvez obtenir de votre environnement.
Comme un détail supplémentaire, même si elle était fixée de telle sorte que n
avait une valeur, la boucle for
dépassements le tableau et vous donne un comportement non défini à nouveau.
Pour un tableau de taille m
, l'en-tête de la boucle doit lire
for (size_t i = 0; i < m; ++i)
Depuis l'indexation est basé sur 0, vous ne pouvez pas index à m
, qui est en dehors du tableau.
C est un langage de programmation impératif, non déclaratif. Cela signifie en gros que votre programme est exécuté ligne par ligne. Vous ne pouvez pas déclarer un tableau qui mettra automatiquement à jour sa taille quand 'n' change, vous ne pouvez déclarer qu'un tableau dont la taille est dans' n' ** au moment de la déclaration **. – StoryTeller
La question est (i) bien écrite, (ii) contient un court code compilable, (iii) documente la sortie réelle, (iv) documente la sortie attendue. Et deux utilisateurs établis ont soumis de bonnes réponses, ce qui ajoute plus de crédibilité à la question. Alors pourquoi la downvote? – Bathsheba
@Bathsheba peut-être parce que c'est une question qui montre qu'il n'a pas obtenu un "concept de base" de C et donc c'est une mauvaise question et il est une mauvaise personne;) –