9
votes

AVERTISSEMENT: le format '% d' s'attend à ce que le type 'int *', mais l'argument 2 a le type 'int'

Donc, je suis nouveau à C et j'ai des problèmes avec ce qui se passe avec cet avertissement. Que signifie l'avertissement et comment puis-je le réparer? Le code que j'ai écrit est ici: xxx


0 commentaires

8 Réponses :


13
votes

La fonction scanf prend l'adresse d'une variable pour mettre le résultat.
Écriture scanf ("% d", & quelquevar) passera l'adresse du du / Code> Variable (à l'aide de l'opérateur & Unary).
La fonction scanf déposera un numéro dans la pièce de mémoire à cette adresse. (qui contient votre variable)

Lorsque vous écrivez scanf ("% d", âge) , vous passez la valeur du Âge variable à scanf . Il essaiera de déposer un numéro dans la pièce de mémoire à l'adresse 0 (puisque Âge est 0 ), et obtenez horriblement foiré. < / p>

Vous devez passer et âge à scanf .

Vous devez également attribuer la mémoire pour scanf Pour lire une chaîne dans nom : xxx


0 commentaires

1
votes

Vous devriez écrire scanf ("% d", et Âge) , comme la fonction scanf doit modifier la valeur de Âge , d'où la nécessité de le transmettre "par adresse" et non "par valeur".


0 commentaires

0
votes

Cela signifie que cela s'attend à ce qu'un "int *" (c'est-à-dire un pointeur à un entier) mais vous le donnez "INT" qui est un entier. Pour résoudre ce problème, ajoutez et à vieillir dans la ligne Scanf pour devenir.

scanf ("% d \ n", âge);


0 commentaires

0
votes

Je suppose que sa plainte sur la ligne scanf ("% d \ n", âge); Le problème est que Scan F attend un pointeur à votre variable non la variable. Vous devez obtenir une adresse à la variable en perment un '& `et ça devrait aller.


0 commentaires

0
votes

L'avertissement signifie exactement ce qu'il dit: le compilateur s'attend à un pointeur sur INT plutôt que d'un int dans le scanf appel.

Fix rapide: remplacer Âge avec et Âge , et tout fonctionnera.

C passe tous les arguments par valeur, ce qui signifie que si vous passez une variable, seule la valeur de la variable est passée. La fonction de réception peut modifier cette valeur tout ce qu'il veut, mais la valeur d'origine n'est pas modifiée. Pour modifier la variable, vous devez transmettre une valeur qui pointe sur la variable en quelque sorte, laquelle en C est un pointeur.

Pour obtenir un pointeur sur une variable, préfixez-le avec & . Pour utiliser une variable, vous avez un pointeur, préfixez la valeur du pointeur avec * .

Dans ce cas, vous voulez scanf pour modifier la valeur de Âge , vous devez donc la transmettre un pointeur.


0 commentaires

0
votes
char twenty_bytes[20] = "";
scanf("%s\n", twenty_bytes);

0 commentaires

6
votes

Le problème est la suivante:

char* name = "";


0 commentaires

0
votes

hey ami signifie récemment aujourd'hui, j'ai aussi passé ce sujet.don ne vous inquiétez pas, c'est simple.

problème dans les lignes de code ci-dessous: p> xxx pré>

et P>

scanf("%d\n", &age);


0 commentaires