2010-11-27 21 views

Respuesta

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

exactamente lo que necesitaba? Entonces, el entorno es en realidad una variedad de punteros de caracteres, ¿verdad? y cada puntero de carácter en la matriz apunta a una variable de entorno ¿verdad? –

+1

Cada puntero apunta a una cadena (sí, matriz de caracteres) de la forma "variable = valor". La última entrada es un puntero nulo, que termina el ciclo de arriba. – sje397

+0

Muchas gracias :) .. Tu comentario fue muy informativo. –

2

Qué quiere decir

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

No, 'extern char ** environ;' es un estándar POSIX. Esta firma para 'main' es completamente no estándar. –

+0

Usted es completamente correcto. Sin embargo. Por eso pregunté. Se compila y se ejecuta correctamente en gcc en Solaris 9 y 10, bajo cc en HPUX 10i, 11.0 y 11i. También compiló y ejecutó versiones anteriores de DEC Unix y DGUX. El punto es que la gente obtiene ** environ y la antigua int main (int, char **, char *) confusa. No tengo mi K & R para verificar o lo reclamaré allí también. ¿Qué dice tu K & R? –

Cuestiones relacionadas