OVH Cloud OVH Cloud

adresse d'une variable d'environnement

23 réponses
Avatar
Kevin Denis
Bonjour,

je suis sur un système linux x86 32bits.
J'ai des variables d'environnements, et depuis un programme C, je
souhaite connaitre leurs adresses.
Typiquement:
MAVAR="blablable(...)blablbabla"
export MAVAR

Si je regarde le man, je vois que la fonction getenv à l'air de
faire l'affaire. getenv renvoie un pointeur, et il est de type:
#include <stdlib.h>
char *getenv (const char *name);

J'écris donc:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
char *p = NULL; //je vais utiliser un pointeur
p = getenv('MAVAR'); //getenv me renvoie un pointeur
printf('Adresse de MAVAR: %p', p); //j'affiche le pointeur
return 0; //comme ça gcc râle moins
}

sauf que ça ne fonctionne pas
J'ai lors de la compilation des warning:
warning: multi-character character constant
et
warning: passing arg 1 of `getenv' makes pointer from integer without a cast

et au lancement le programme ne fait rien d'autre qu'un segfault.

Un conseil pour me montrer ce que je fais mal?
Merci
--
Kevin

3 réponses

1 2 3
Avatar
Éric Lévénez
Le 07/09/11 18:30, Xavier Roche a écrit :

A la limite, un strdup(env != NULL ? env : "") aurait été visuellement
plus clair, mais je chipotte.



Je préfère TRÈS largement le strdup(env ? env : "") qui est hyper clair
et concis.

--
Éric Lévénez
FAQ de fclc : <http://www.levenez.com/lang/c/faq/>
Avatar
Marc
Antoine Leca wrote:

Marc écrivit :
Antoine Leca wrote:

char* value=strdup(env || "");



|| renvoie 1 ou 0, pas de très bons arguments pour strdup.



Oui, on dirait que je lis trop de scripts shell ces jours-ci...



Je me disais aussi en lisant ça que ça devait marcher dans un autre
langage...

gcc a une extension : env ?: "" (le second argument de ?: est par
défaut le même que le premier).
Avatar
espie
In article <j486t1$efj$,
Antoine Leca wrote:
Marc écrivit :
Antoine Leca wrote:

char* value=strdup(env || "");



|| renvoie 1 ou 0, pas de très bons arguments pour strdup.



Oui, on dirait que je lis trop de scripts shell ces jours-ci...



Bah, a cote, PJ ecrit du lisp meme quand il essaie de faire du C, alors...
1 2 3