IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Warning: char format, different type arg


Sujet :

C

  1. #1
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut Warning: char format, different type arg
    Bonjour,

    Je débute en C et j'ai un warning dont je ne comprends pas le sens :

    CODE C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char joueur1[100];
     
    // du code
    printf("Entrer le nom du joueur : ");
    scanf("%s", &joueur1);
    Sauf que sur le scanf, j'ai ce warning qui apparait.

    Donc je demande un format "chaine de caractères" et je la stocke dans un tableau, ou est le problème ?

    Merci

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Bonsoir,

    &joueur1 a le type "pointeur vers tableau de char" et le compilateur attend un "pointeur vers char".
    À la place tu peux écrire &joueur[0] ou juste "joueur", ça donne la même chose dans la plupart des cas.

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par dapounet Voir le message
    tu peux écrire &joueur[0] ou juste "joueur", ça donne la même chose dans la plupart des cas.
    Si 'joueur' est un tableau, &joueur[0], joueur et joueur + 0 ont toujours la même valeur et le même type : adresse du premier élément.

  4. #4
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Ok et si j'ai bien compris, un tableau de char est en fait un pointeur sur char ?

    Or scanf travaille sur les adresses (pointeur) et joueur1 est en fait déjà un pointeur donc pas besoin de rajouter le "&" en plus...

    C'est bien ca ?

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aspic Voir le message
    Ok et si j'ai bien compris, un tableau de char est en fait un pointeur sur char ?
    Le nom du tableau, oui.
    Or scanf travaille sur les adresses (pointeur) et joueur1 est en fait déjà un pointeur donc pas besoin de rajouter le "&" en plus...

    C'est bien ca ?
    Oui.

  6. #6
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Et bien merci

  7. #7
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Bonjour,

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Si 'joueur' est un tableau, &joueur[0], joueur et joueur + 0 ont toujours la même valeur et le même type : adresse du premier élément.
    En tout cas ils ne se comportent pas toujours de la même façon, cf. &joueur ou sizeof joueur. Comment expliquer ça ?

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par dapounet Voir le message
    En tout cas ils ne se comportent pas toujours de la même façon, cf. &joueur ou sizeof joueur. Comment expliquer ça ?
    Quoi ? Que &tableau est différent de &tableau|0] ?

    Le premier est l'adresse d'un tableau
    Le deuxième est l'adresse d'un élément du tableau

    Un tableau et un élément de tableau sont 2 objets radicalement différents, même si, pour un cas particulier ([0]), les adresses ont la même valeur (mais pas le même type).

    Quand à sizeof, tout dépend, et pour la même raison, si on parle du tableau ou d'un pointeur sur le premier élément du tableau.

    Je ne vois pas très bien ce qui te pose problème. Tu peux préciser ?

  9. #9
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par dapounet Voir le message
    En tout cas ils ne se comportent pas toujours de la même façon, cf. &joueur ou sizeof joueur. Comment expliquer ça ?
    C'est tout simplement la norme qui veut ça:
    6.3.2 Other operands
    6.3.2.1 Lvalues, arrays, and function designators
    An lvalue is an expression with an object type or an incomplete type other than void;53)
    1 if an lvalue does not designate an object when it is evaluated, the behavior is undefined.
    When an object is said to have a particular type, the type is specified by the lvalue used to
    designate the object. A modifiable lvalue is an lvalue that does not have array type, does
    not have an incomplete type, does not have a const-qualified type, and if it is a structure
    or union, does not have any member (including, recursively, any member or element of
    all contained aggregates or unions) with a const-qualified type.

    2 Except when it is the operand of the sizeof operator, the unary & operator, the ++
    operator, the -- operator, or the left operand of the . operator or an assignment operator,
    an lvalue that does not have array type is converted to the value stored in the designated
    object (and is no longer an lvalue). If the lvalue has qualified type, the value has the
    unqualified version of the type of the lvalue; otherwise, the value has the type of the
    lvalue. If the lvalue has an incomplete type and does not have array type, the behavior is
    undefined.

    3 Except when it is the operand of the sizeof operator or the unary & operator, or is a
    string literal used to initialize an array, an expression that has type ‘‘array of type’’ is
    converted to an expression with type ‘‘pointer to type’’ that points to the initial element of
    the array object and is not an lvalue.
    If the array object has register storage class, the behavior is undefined.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/10/2006, 16h22
  2. differents type de courbes JFreeChart ensemble
    Par noussa_nouha dans le forum 2D
    Réponses: 8
    Dernier message: 08/09/2006, 13h55
  3. [Sécurité] Différents types de paiements
    Par FredKéKé dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 12h43
  4. [ tinyint et char ] problème de type
    Par shirya dans le forum Installation
    Réponses: 3
    Dernier message: 05/11/2005, 07h08
  5. Application Portable sur differents types de BDD
    Par sylvain_2020 dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 23/09/2003, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo