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 :

besoin d'aide sur des warnings


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut besoin d'aide sur des warnings
    Bonjour, j'ai le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char seed[50];
    /* ici, dans une sous-fonction je copie dans seed une string */
     
    /* initialisation of the pseudo-random numbers generator seed */
      unsigned seed_=(!strcmp(seed,"TIME")) ? (unsigned) time(NULL) : strtol(seed,&seed,10);
    j'ai le warning suivant :

    ../Sources/Mysources/main.c:454: warning: passing arg 2 of `strtol' from incompatible pointer type
    pourtant j'ai bien mis un

    autre warning : dès que je fais un strdup() j'ai le warning suivant

    ../Sources/Mysources/main.c:520: warning: passing arg 1 of `calloc' with different width due to prototype
    je sais que dans un strdup il y a un malloc (ou plutôt un calloc vu le warning), mais comment puis-je l'enlever ?

    Voici mes options de compil (chopées sur la page d'Emmanuel Delahaye)

    ED_PARANOIA=-O2 -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int \
    -Werror-implicit-function-declaration -Wmain -Wparentheses \
    -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused \
    -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef \
    -Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings \
    -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes \
    -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn \
    -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations \
    -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long \
    -Wunreachable-code
    merci beaucoup.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Un tableau de char est implicitement convertible en char*, mais n'est pas un vrai char*. Tu ne peux donc pas passer son adresse à une fonction qui demande un pointeur vers un char*.
    Tu dois créer une seconde variable, de type char* celle-ci, et passer son adresse à strtol().
    Ou passer NULL à la place, si tu ne l'utilises pas.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Un tableau de char est implicitement convertible en char*, mais n'est pas un vrai char*. Tu ne peux donc pas passer son adresse à une fonction qui demande un pointeur vers un char*.
    Tu dois créer une seconde variable, de type char* celle-ci, et passer son adresse à strtol().
    Ou passer NULL à la place, si tu ne l'utilises pas.
    OK, merci, c'est réglé. Et pour le second warning, quelqu'un aurait-il une idée ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Vu que je ne vois pas l'appel, ce n'est pas évident.
    Et regarde si strdup() n'est pas une macro ou une fonction inline...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Voici qq passages lorsque j'utilise strdup()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char * p=strstr(line,"COMPEGR ");
    p+=8; /* 8 = strlen("COMPEGR ") */
    id->egr->comp=strdup(p);
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NameFileOutput[N+5]=strdup("Turbulence.txt");

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    OK, ça a l'air correct.
    Épluche un peu les en-têtes...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Voici qq passages lorsque j'utilise strdup()
    strdup() n'est pas standard. Tu as inclus ce qu'il faut pour ton compilateur ? (en principe <string.h>)

    Vérifie qu'il n'y a pas une macro 'strdup' parasite définie dans un de tes headers d'application ou 'maison'...

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Voici qq passages lorsque j'utilise strdup()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char * p=strstr(line,"COMPEGR ");
    p+=8; /* 8 = strlen("COMPEGR ") */
    id->egr->comp=strdup(p);
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NameFileOutput[N+5]=strdup("Turbulence.txt");
    Dans le 2ième passage, ton tableau NameFileOutput est un tableau de char * ??
    (char **Name.. suivi d'un alloc, ou bien char *Name...[50], mais PAS char *Name.. suivi d'un alloc, ou char Name..[50] ? )

    Parce que si c'est un tableau de char, tu veux stocker un char* dans un char...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char seed[50];
    /* ici, dans une sous-fonction je copie dans seed une string */
     
    /* initialisation of the pseudo-random numbers generator seed */
      unsigned seed_=(!strcmp(seed,"TIME")) ? (unsigned) time(NULL) : strtol(seed,&seed,10);
    Normal. le 2ème paramètre de strtol() attends l'adresse d'un pointeur sur char et non l'adresse d'un tableau de 50 char.

    Il faut donc lui fournir un pointeur sur char :
    et lui passer son adresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       strtol (seed, &pend, 10);
    en admettant que tu l'utilises par la suite. Si c'est pour ne pas l'utiliser, passer NULL directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       strtol (seed, NULL, 10);
    Rien de tout cel ne tombe du ciel, mais est expliqué dans le doc de strtol()...

Discussions similaires

  1. Besoin d'aide sur des images
    Par Kro86 dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 13/06/2008, 11h11
  2. Réponses: 3
    Dernier message: 09/04/2008, 14h24
  3. Besoin d'aide sur des requetes
    Par lamorkytu dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/01/2008, 05h31
  4. Achat pc desktop, besoin d'aide sur le choix des composants
    Par Matalobos dans le forum Ordinateurs
    Réponses: 29
    Dernier message: 25/08/2007, 23h16
  5. [Regex] besoin d'aide sur des motifs
    Par Oluha dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 25/11/2005, 11h23

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