2010-11-27 8 views

Répondre

17
#include <unistd.h> 
#include <stdio.h> 

extern char **environ; 
//... 

int i = 0; 
while(environ[i]) { 
    printf("%s\n", environ[i++]); // prints in form of "variable=value" 
} 
+0

exactement ce que je besoin? Donc environ est en fait un tableau de pointeurs de caractères non? et chaque pointeur de caractère dans le tableau pointe vers une variable d'environnement droite? –

+1

Chaque pointeur pointe vers une chaîne (ouais, tableau de caractères) de la forme "variable = valeur". La dernière entrée est un null-pointeur, qui termine la boucle ci-dessus. – sje397

+0

Merci beaucoup :) .. Vous commentez était si informatif. –

2

Voulez-vous dire

int main(int argc, char **argv, char **envp) 
{ 
    while(*envp!=null) { 
     printf("%s\n", *envp); 
     envp++; 
    } 
    return 0; 
} 
+4

Non, 'extern char ** environ;' est la norme POSIX. Cette signature pour 'main' est complètement non-standard. –

+0

Vous avez entièrement raison. Toutefois. C'est pourquoi j'ai demandé. Il compile et s'exécute correctement sous gcc sous Solaris 9 et 10, sous cc sur HPUX 10i, 11.0 et 11i. Il a également compilé et fonctionné sur les anciennes versions de DEC Unix et DGUX. Le point étant que les gens obtiennent ** environ et l'int int (int, char **, char *) confus. Je n'ai pas mon K & R à vérifier ou je le réclamerais aussi. Que dit votre K & R? –