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 : pointer targets in passing argument 1 of 'strcpy' differ in signedness


Sujet :

C

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut Warning : pointer targets in passing argument 1 of 'strcpy' differ in signedness
    Bonjour,
    Ce warning apparait en RHEL 6.3 (64 bits) mais n'était pas signalé en RHEL 5.6 (32 bits).
    C'est sur le strcpy que se pose le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct { unsigned short len; unsigned char arr[30]; } AIRSP;
    char NEW_AIRSP[21];
    strcpy(AIRSP.arr,NEW_AIRSP);
    Si je caste NEW_AIRSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(AIRSP.arr,(unsigned char)NEW_AIRSP);
    J'ai 2 Warnings :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    arinc_main.c:7308: warning: cast from pointer to integer of different size
    arinc_main.c:7308: warning: pointer targets in passing argument 1 of 'strcpy' differ in signedness
    Merci de votre aide

  2. #2
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    En fait il faut s'adapter au prototype de strcpy() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy((char *)AIRSP.arr,(const char *) NEW_AIRSP);

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(AIRSP.arr,(unsigned char)NEW_AIRSP);
    Soit tu t'es trompé dans ton code soit tu t'es trompé en postant, mais il manque une étoile, d'où le premier warning.
    La 2e erreur vient du fait que les char sont signés par défaut (la plupart du temps voire tout le temps) et que tu donnes un tableau de char explicitement non signés.

    Le transtypage n'est a priori utile que pour le premier paramètre. Le code suivant compile sans erreur sous Mac OS X Lion (64 bits) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdlib.h>
    #include <string.h>
     
    int main(void)
    {
     
    	struct { unsigned short len; unsigned char arr[30]; } AIRSP;
    	char NEW_AIRSP[21];
    	strcpy((char*) AIRSP.arr, NEW_AIRSP);
     
    	return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ gcc -Wall -Wextra isa94.c 
    $

  4. #4
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    oui, j'ai oublié l'*.
    C'est pénible ces versions de compilateur qui sont plus ou moins permissive. Ces erreurs n'apparaissait pas dans les versions HP-UX 11.11, RHEL 4.5, RHEL 5.6.
    j'ai réussi à les contourner finalement après quelques recherches.
    Merci

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

Discussions similaires

  1. Warning: Call-time pass-by-reference has been deprecated
    Par Poseidon62 dans le forum Langage
    Réponses: 8
    Dernier message: 16/10/2011, 16h03
  2. Réponses: 4
    Dernier message: 22/09/2010, 14h42
  3. discards qualifiers from pointer target type
    Par loïc31baground dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 04/06/2009, 11h48
  4. Réponses: 15
    Dernier message: 21/01/2009, 15h21
  5. Warning lors du this passé dans un constructeur
    Par NicolasJolet dans le forum C++
    Réponses: 9
    Dernier message: 10/08/2006, 09h43

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