Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Variables globales en C


PouYou

Messages recommandés

Ca fait 'achement longtemps que j'ai plus touché au c, mais il me semble que le plus simple serait d'utiliser un pointeur non :P

Lien vers le commentaire
Partager sur d’autres sites

#include <toto.h>

char *truc;

void huhu()
{
 puts(truc);
}

int main()
{
 truc = (char *) malloc (15 * sizeof(char));

 if (truc)
 {
   sprintf(truc, "Hello World !\n");
   huhu()
 }
 else
   puts("Oh oh...\n");

 return 0;
}

 

truc est globale.

 

JEU : trouvez comment remplacer le sprintf par un strcpy

Lien vers le commentaire
Partager sur d’autres sites

JEU : trouvez comment remplacer le sprintf par un strcpy

C'est ça le but du jeu ?

Je pige pas trop là, ya un piège ? :P

Quel rapport avec la question de PouYou ?

 

 

 

Bon, le procédé est barbare mais ça marche :

 

#include <stdio.h>

int* parasite; //ce pointeur global va parasiter la variable locale à main() appelée "barbare"
void grouic(void);

int main(void) {
   static int barbare; //variable locale, mais statique (très important le static)
   parasite = &barbare; //on parasite la variable locale statique
   barbare = 18;
   printf("Ici barbare = %d\n", barbare);
   grouic();
   printf("Et maintenant barbare = %d\n", barbare);
   return 0;
}

void grouic(void) {
   puts("...Appel à grouic()...");
   *parasite = 22; //parasite pointe vers la variable locale à main()
   return;
}

 

Faut pas en abuser, car ... c'est barbare :-( (même si ctime() utilise ce procédé :-P )

Modifié par leneuf22
Lien vers le commentaire
Partager sur d’autres sites

Utiliser une variable globale pour "sortir" une variable locale de son contexte ?!?

C'est sacrément gonflé, en effet... plutôt passer la variable en paramètre, ou carrément la mettre VRAIMENT globale (et pas faire mumuse avec des pointeurs... ou alors pense à rajouter = NULL lors de l'initialisation de ton pointeur sinon bonjour le segfault !)

Lien vers le commentaire
Partager sur d’autres sites

Héhé :D

 

Mais la variable est statique, donc pas de risque !

 

Comme je l'écrivais plus haut, la fonction ctime() renvoie un pointeur vers un tableau statique local à... ctime() ;)

 

Gonflé, le ctime ;)

tu veux dire que ctime() est écrite comme ça : (désolé, j'ai pas les sources des libc sous la main)

char *ctime(const time_t *timep)

{

char toto[12];

(...)

return toto;

}

 

?!?!???

Lien vers le commentaire
Partager sur d’autres sites

Presque, sauf que c'est pas

char toto[12];

 

mais

 

static char toto[12];

 

Si ça marchait pas comme ça, tu devrais désallouer le pointeur retourné toi-même, car ce serait une allocation programmée.

Modifié par leneuf22
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...