2014-05-12 7 views
-1

J'essaie de définir une nouvelle variable d'environnement avec setenv().Puis-je définir setenv() en utilisant un envp?

Mais je noticided cette fonction setenv() tournerai ma nouvelle variable environement que si j'utilise le environement "extern char ** environ"

Mais je veux utiliser l'argument de la main(): « char * * envp ".

Voici le code que j'ai essayé de faire pour mettre dans envp, mais comme vous le verrez si vous exécutez ce code, il ne sera pas défini dans envp. Mais si j'utilise constchar **, cela fonctionne.

Des idées?

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

int  main(int ac, char **av, char **envp) 
{ 
    int i; 

    i = 0; 
    setenv("NEW_ENV_VAR", "hello_world", 0); 
    while (envp[i]) 
    printf("%s\n", envp[i++]); 
    return (0); 
} 

Répondre

1

setenv() est documentée à ne pas être autorisé à changer l'argument envp facultatif principal. Si vous avez besoin de parcourir toutes les variables d'environnement, utilisez le extern char **environvariable.

Voir également this question.

+0

Donc, je dois recoder setenv(), si je veux utiliser envp, non? – Difender

+0

Non. 'Envp' est une * variable locale * dans' main' et il n'y a fondamentalement aucun moyen pour une fonction externe de la modifier. Utilisez 'extern char ** environ;'. Ou si vous insistez pour utiliser la variable 'envp', écrivez juste' envp = environ; 'dans' main' quelque part après l'appel 'setenv'. –

Questions connexes