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 :

assignment makes pointer from integer without a cast


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Par défaut assignment makes pointer from integer without a cast
    Bonjour à tous!
    J'écris pour m'amuser un petit jeux, et là je butte sur un pointeur:

    j'ai une fonction constituée essentiellement d'un malloc, dont voici le proto:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s_scoreNom * hist_initTabHist(FILE *fichier, char userName[], unsigned int nbc)
    Donc ma fonction lit une fichier ainsi qu'un nom d'utilisateur.
    Elle alloue une tableau (de nbc lignes) et renvoie un pointeur vers la premiere case de ce tableau.
    Enfin, chaque ligne du tableau contient une structure (s_scoreNom)

    J'utilise ensuite ma fonction dans mon main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    s_scoreNom *ptr_sc = NULL;
    ptr_sc = hist_initTabHist(f_historique, nomJoueur, nbLigneHistorique)
    On voit ici que j'essaye de récupérer dans ptr_sc le résultat de ma fonction, pour avoir ensuite accès à mon tableau.
    J'ai donc une égalité de pointeur, qui sont de même type, mais j'ai toujours un warning du compilo (GCC sur Linux) .

    Pouvez-vous m'aider, car je ne vois pas ce que j'ai fais de mal?

    Par avance merci

  2. #2
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    Sans les déclarations de nomJoueur et nbLigneHistorique cela ne va pas être facile de t'aider. Peut-être as tu déclarés nomJoueur comme un tableau d'octets non signés et qu'au passage du paramètre, ta fonction attend un pointeur de char, ou bien il te faut préciser le type à retourner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s_scoreNom * hist_initTabHist(FILE *fichier, char *userName, unsigned int nbc) ;
    Appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     char nomJoueur[128] = "Joueur1" ;
    unsigned int nbLigneHistorique = 10 ;
    s_scoreNom *ptr_sc = NULL ;
    ...
    ptr_sc = (s_scoreNom *)hist_initTabHist(f_historique, nomJoueur, nbLigneHistorique) ;
    ...
    Es-tu sur que ce problème intervienne sur l'appel de ta fonction ?

    En attendant d'avoir plus d'informations, bonne continuation.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Peut-être, au moment de l'appel, le compilateur ne connait-il pas le prototype de la fonction et présume qu'elle retourne un int (comportement obsolète dans une telle situation) ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Par défaut
    Bonjour Elijha, et merci de ta réponse rapide:
    voici ma déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FILE *f_historique = fopen("jeuxhistorique", "a+"); //fonctionne! (verifié avec gdb)
    unsigned int nbLigneHistorique = lecf_nbLigne(f_historique); //fonctionne! (vérifié aussi!)
    char nomJoueur[] = "truc";
    s_scoreNom *ptr_sc = NULL;
               ptr_sc =  hist_initTabHist(f_historique, nomJoueur, nbLigneHistorique);

    Et je sais aussi que ma fonction hist_initTabHist fonctionne (testé avec gdb).

    Ce qui ne fonctionne pas, c'est le coup de l'égalité entre ma fonction et ptr_sc: en effet, lorsque je modifie le code et que j'écrie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hist_initTabHist(f_historique, nomJoueur, nbLigneHistorique);
    à la place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ptr_sc =  hist_initTabHist(f_historique, nomJoueur, nbLigneHistorique);
    Alors, il n'y a plus de warning!

    En tout cas, merci de ton aide!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Par défaut
    Peut-être, au moment de l'appel, le compilateur ne connait-il pas le prototype de la fonction et présume qu'elle retourne un int (comportement obsolète dans une telle situation) ?
    Whao! bien vu! ça fonctionne!!!!!

    En effet, je savais que je n'avais pas encore inclue le header contenant le proto, d'ailleurs, j'avais des warning me le disant, mais dans ma tête de newbi, je ne me suis jamais dis que le compilo pouvait présumer que la fonction retorunait un int!
    Vu que pour les autres fonction, ça marchait, je n'y ai vraiment pas pensé!

    Bref, la prochaine fois, je ne referais pas la même erreur!

    En tout cas merci à vous deux!

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/01/2012, 23h02
  2. Réponses: 5
    Dernier message: 17/02/2011, 20h19
  3. Réponses: 2
    Dernier message: 12/11/2010, 12h11
  4. Réponses: 3
    Dernier message: 08/09/2009, 09h40
  5. Réponses: 6
    Dernier message: 11/05/2006, 22h08

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