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

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 57
    Points : 43
    Points
    43
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Points : 38
    Points
    38
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 57
    Points : 43
    Points
    43
    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 confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

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

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

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Points : 38
    Points
    38
    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...

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 57
    Points : 43
    Points
    43
    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);
    }

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Points : 38
    Points
    38
    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); 
    }

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    je vois plusieur pb dans ta fonction 3


    1) tu déclare int fonction_3 donc retourne un int pas un char!!!
    2) tu demande d'ouvrir le fichier avec la varglobal, or vargobal = NULL!!!

    et encore plein d'autre détail comme cela...

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    Enfait pour l'instant j'ai tout dans le même programme : je n'ai pas fais de fonction externe donc je ne peu pas faire "extern var". J'ai surement oublié de le mettre, mais je calcul ma variable au tout début du main, donc elle prend bien une valeur. Pour l'instant je vais, a chaque fois que je dois utiliser la variable , les recalculer avec mes fonctions car si je la recalcule elle fonctionne. Mais effectivement, dans pas longtemps je vais passer aux fonctions externes pour la propreté et la compréhension

    Merci bien tout les deux en tout cas ^^
    A bientot!

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    o pire envoie moi ton programme en entier!!!

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    Lool
    Nan je préfère pas ^^". Déjà parce-qu'il est assez long et en plus je développe cette appli pour une boite et je préfère pas donner le code de mon programme. Le prends pas mal, c'est pas contre toi ^^
    Mais en tout cas merci de m'avoir accordé de ton temps.
    Surement à bientot :p
    +++

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    oki lol
    als bon courage à toi!!

  13. #13
    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 : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    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.

  14. #14
    Membre chevronné
    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
    Points : 1 750
    Points
    1 750
    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.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Points : 38
    Points
    38
    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