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 :

Comment utiliser un pointeur dont le nom est dans un chaine de caractère ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 5
    Par défaut Comment utiliser un pointeur dont le nom est dans un chaine de caractère ?
    Bonjour a tous !

    Voici mon problème :
    J'ai dans un fichier le nom d'un pointeur (vers bitmap en l'occurence). Je suis donc contraint de récupérer le nom de ce pointeur dans un chaine de caractère (un tableau), mais je n'arive pas ensuite à me servir du nom du pointeur pour acceder a la zone pointée, puisque le nom du dit pointeur est dans un tableau de caractère.

    Pour plus de clareté voici mon petit code (qui bug bien sur!) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          /* Lecture du nom du pointeur vers bitmap */
          fscanf(fp, "%s",fic);
          strcpy(nom_du_pointeur,fic);
     
          /* Utilisation du nom du pointeur pour acceder a la zone pointé par le pointeur qui porte le nom rentré dans la chaine de caractère */
          masked_blit(nom_du_pointeur,screen,0,0,10,10,50,50);
    La fonction masked_blit est une fonction ALLEGRO, de type :

    void masked_blit (BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height)
    Le problème étant que ma le nom du pointeur BITMAP *source est dans une chaine de caractère, et j'aimerai bien que ce soi le pointeur lui meme qui soit à la place du BITMAP *source.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BITMAP * image;
    strcpy(nom_du_pointeur,"image");
    J'aimerai me servir de la chaine "image" contenue dans le tableau de caractère nom_du pointeur pour acceder au pointeur image.

    J'éspere que c'est clair, merci d'avance !

  2. #2
    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 yanthorpes
    J'ai dans un fichier le nom d'un pointeur
    : Données de fichier et pointeur sont des noms qui ne vont pas ensemble... Quand à un "nom de pointeur", qu'est-ce que ça peut bien être ?
    (vers bitmap en l'occurence). Je suis donc contraint de récupérer le nom de ce pointeur dans un chaine de caractère (un tableau), mais je n'arive pas ensuite à me servir du nom du pointeur pour acceder a la zone pointée, puisque le nom du dit pointeur est dans un tableau de caractère.
    J'ai absolument rien compris. Avant d'aller plus loin, quelles sont les données du fichier et comment ont-elles été enregistrées ?

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Pourquoi stocker les pointeurs dans un fichier et pas un tableau par exemple?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Ton pointeur lors de l'exécution du programme n'a pas de nom, l'identifiant que tu lui donne pendant la phase de développement n'est autre qu'un identifiant car il est plus simple de travailler avec un nom qu'avec une adresse ... adresse, c'est ce que cache l'identifiant de ton pointeur, ni plus, ni moins, je ne pense pas que ce que tu veuilles faire soit possible !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    En effet, à vue de pif, tu as l'air de sous entendre qu'on pourrait retrouver et utiliser à l'éxecution des chaînes de caractères comme des variables... ceci existe pour CERTAINS langages, c'est la Reflection, mais C ne le supporte pas...

    tu serais en C++ je t'aurais conseillé une map<string, pointeur> mais là, à part une série de if() { } else if() { } en comparant à chaque fois ton char* au nom de ton pointeur... je ne crois pas qu'il soit possible de faire ce que tu veux faire...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 5
    Par défaut
    Merci pour toutes vos réponsses !!

    En fait, j'utilise le fichier comme une fiche d'information permetant a mon programme de savoir quels bitmaps afficher.

    Par exemple, lorsque je veux qu'il affiche une pomme, puis un bateau, dans mon fichier je vait écrire :

    pomme 10 10
    bateau 50 10

    ("10 10" et "50 10" sont les coohordoné auquels je veut que ma pomme et mon bateau aparaissent)

    Je récupère - en lisant mon fichier - "pomme" dans un tableau de caractère. Comme j'ai déja chargé en mémoire un pointeur vers bitmap (de ma pomme) qui s'appelle pomme, je voudrai que lorque je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    masked_blit(chaine_de_caractère, screen,x,y, 50, 50)
    le compilateur remplace chaine_de_caractère par l'iddentifiant de mon pointeur !

    J'ai ré-expliqué un peu mon problème, mais CSoldier et Swoög avez bien cerné mon problème. Merci donc pour vos information !

    Je vais esseyer de faire comme tu m'a di Swoög, avec de if... else... (ça me semble pas très propre, mais si on peu pas faire autrement...!).
    Au passage, c'est possible de faire des switch avec des chaine de caractère ? (ça serait moin lourd que des if... else)

    Merci en tout cas !

  7. #7
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par Swoög
    En effet, à vue de pif, tu as l'air de sous entendre qu'on pourrait retrouver et utiliser à l'éxecution des chaînes de caractères comme des variables... ceci existe pour CERTAINS langages, c'est la Reflection, mais C ne le supporte pas...

    tu serais en C++ je t'aurais conseillé une map<string, pointeur> mais là, à part une série de if() { } else if() { } en comparant à chaque fois ton char* au nom de ton pointeur... je ne crois pas qu'il soit possible de faire ce que tu veux faire...
    En fait il existe une solution pour ca, mais c'est extremement affreux.

    Ca consiste a reecrire du code a partir des chaines de caracteres, puis a le compiler et ensuite a l'utiliser, par exemple comme une librairie dynamique.

    Mais c'est moche...

  8. #8
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Cool si ça marche

    au fait, Dans outils de la discussion, en haut, il y a un petit truc pour dire que ton problème est résolu
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 5
    Par défaut
    Oups je me suis trompé ! Les 2 codes marchent !
    C'est parce que entre la déclaration de la structure et la boucle for, je fesait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pomme=load_bitmap("pomme.bmp",NULL);
    Ce qui a pour effet de modifier le pointeur pomme ! Je vait donc metre cette ligne avant la déclaration de la structure. (et tant pis si je met des instructions avant les declarations !

    Meric a tous en tout cas ! Et désolé Mayti4 pour avoir douté de la pertinence de ton code !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/05/2008, 10h54
  2. Comment appeler une méthode dont le nom est dans un string?
    Par Ireon dans le forum API standards et tierces
    Réponses: 22
    Dernier message: 13/04/2007, 17h22
  3. Réponses: 3
    Dernier message: 05/10/2006, 18h52
  4. Réponses: 4
    Dernier message: 18/08/2006, 07h57
  5. Appel de methode dont le nom est dans une variable
    Par osopardo dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 20h56

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