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 :

problemes avec des variables globales


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 57
    Par défaut problemes avec des variables globales
    Bonjour bonjour!
    J'ai un problème avec mes variables globales
    Enfait je déclare donc des variables globales en dehors de toute fonction et au tout début de mon programme (jusque la tout va bien ^^). Dans le main mes variables prennent une valeur grâce au retour d'une fonction.
    Je fais un petit printf histoire de voir si tout va bien, et tout est ok ma variable à la bonne valeur et je peu l'utiliser dans mon main.
    Ces variables que j'ai créées et touchées dans le main, je peu les voir que dans certaines fonctions : il y a des fonctions ou je peu les utiliser et les afficher, et d'autre ou la variable et vide. A croire que la variable n'a pas changé de valeur et quelle a gardée la valeur de l'initialisation.

    Si quelqu'un a une idée il est le bienvenue =)
    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Quand tu les utilise dans les autres module tu penses bien a la déclarer à nouveau en mettant: "extern variable;" ??

    sinon envoi un peu de ton code pour être sur de comprendre correctement!!!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 57
    Par défaut
    Alors voila la forme de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    #include
    ...
    char* varglobale = NULL;
     
    int main()
    {
      varglobale = fonction3(para);
       fonction1(para, para);
       fonciton2(para);
    }
     
    int fonction1(int para, char* para)
    {
       printf("teste : %s\n", varglobale);  // ici printf affiche ce qu'il faut
       fonction4();
    }
     
    int fonction4()
    {
      printf("teste : %s", varglobale);    // ici printf affiche " "
    }
    Voila c'est a peu près la forme de mon code.
    Ce que j'ai remarqué c'est que les fonction dans lesquelles ma variable ne marche pas sont des fonctions qui ne sont pas appelées directement par le main, mais par d'autre fonction comme dans mon exemple.
    Mais normalement la variable globale devrait quand meme marché nan??!! oO

  4. #4
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Pourrais tu mettre ton code de la fonction2 et 3, s'il te plait.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 57
    Par défaut
    Citation Envoyé par Flob91 Voir le message
    Pourrais tu mettre ton code de la fonction2 et 3, s'il te plait.
    la fonction 2 est une fonction qui ne fait pas grand chose, elle traite juste des nombres quelle reçoit en parametre et lance la fonction 3 dans laquelle la variable ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int fonction2(char* chaine)
    {
       int nbrjoueur = chaine[3];
       .........
      fonction3(nbrjoueur,  ...);
    }
    la fonction 3 ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int fonction3(int nbrjoueur, ...)
    {
    FILE* fichier = NULL;
    fichier = fopen(varglobale, "w");    // enfait la varible globale a le nom du fichier
     
    printf("teste : %s\n", varglobale);   // ne marche pas : affiche " "
    fprintf(....);
    fclose(fichier);
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    regarde se que j'ai fait si ça peut t'aider...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include <stdlib.h>
    #include "fonction.h"
    char *var=0;
     
    int main(int argc, char *argv[])
    {
        char *parametre, *para;
        parametre = argv[1]; 
        para = parametre;   
     
      var = fonction_3(para);
      system("PAUSE");	
      return 0;
    }
    et les fonctions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
    #include <stdlib.h>
    #include "fonction.h"
     
    extern char *var;
    char fonction_3(char *param)
    {
     var = param;
     printf ("%s\n", var);     
     fonction_4();    
    } 
     
    void fonction_4(void)
    {
     printf ("%s\n", var); 
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    attend je vais essayer un bout de code pour vérifier... mais essayer d'enlever NULL a ta déclartion de varglobal...

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par The Free Man Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      printf("teste : %s", varglobale);    // ici printf affiche " "
    Quand tu dis que printf affiche " " veux-tu dire qu'il n'affiche absolument rien du tout ou qu'il affiche "teste :" (il manque juste le contenu de la variable) ?

    Dans le premier cas, essaies de rajouter un \n en fin de chaîne ou un fflush(stdout) après le printf.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    D'après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var = fonction_3(para);
    la fonction 3 est censée renvoyer un "pointeur sur char". Or, non seulement tu lui fais renvoyer un "char" mais en plus il n'y a aucun return dedans ! Du coup elle retourne une valeur bidon, ce qui fait que "var" pointe n'importe où par la suite.

    En principe, utiliser des variables globales c'est pas recommandé... sauf si on ne peut pas faire autrement (rares cas).

    EDIT:

    En plus, dans la fonction 3, tu modifies la valeur de "var"... que tu modifies ensuite encore une fois, juste après, avec sa valeur retour, dans la fonction principale. Je ne comprends pas du tout l'intérêt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var = fonction_3(para); /* dans la fonction principale */
    (...)
    var = param; /* dans la fonction 3 */
    Je pense qu'il y a un problème de conception du programme.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Exact dsl en voulant faire vite j'ai que de la merde ... lol

    jte ferai ça au propre ce soir... quand je serai pas au boulot lol

Discussions similaires

  1. probleme avec des variables
    Par djdelarue dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/06/2010, 09h45
  2. Probleme avec des variables public
    Par Thierry2865 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/11/2009, 11h00
  3. Dll avec des variables globales
    Par declencher dans le forum Débuter
    Réponses: 2
    Dernier message: 03/04/2008, 07h31
  4. Réponses: 6
    Dernier message: 12/09/2007, 17h31
  5. [PHP-JS] Probleme de test avec des variables
    Par bodysplash007 dans le forum Langage
    Réponses: 1
    Dernier message: 02/05/2007, 17h39

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