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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    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 éclairé
    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 : 54
    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
    Points : 742
    Points
    742
    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.
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  3. #3
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    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) ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    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