2013-01-18 1 views
4

J'essaie d'obtenir un répertoire de base d'utilisateurs en utilisant getenv("$HOME"), mais il retourne NULL. Qu'est-ce que je fais mal?getenv() Linux/Ubuntu renvoie NULL

int main(void) 
{ 
    char * path; 
    path = getenv("$HOME"); 
    printf ("The current path is: %s",path); 

    return 0; 
} 

Répondre

4
getenv("PATH"); // This is what you really want 

Et, le cas échéant, compilez avec -Wall et se retrouver avec quelque chose comme ça. (Testé ...)

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

int main(void) { 
    char *path; 
    path = getenv("PATH"); 
    if(path) 
    printf("The current path is: %s\n", path); 
    return 0; 
} 
+0

Je voulais utiliser 'getenv (" $ HOME "). En utilisant votre code, je reçois "Erreur de segmentation (core dumped)" – arynhard

+0

Compilé comme vous l'avez dit. L'option est ajoutée dans la commande Eclipse. Et encore recevoir "Erreur de segmentation (core dumped)" – arynhard

+4

Pourquoi dites-vous à l'OP pour lire PATH, si l'OP veut HOME? – alk

1

pas Si tel était getenv("PATH")? Laisser le $ désactiver le nom de la variable d'environnement.

+0

Oui, il le devrait. –

+0

Pourquoi dites-vous à l'OP de lire PATH, si l'OP veut HOME? – alk

+1

Ah, excuses. Je l'ai essayé sur ma machine avec PATH. Devrait être 'getenv (" HOME ")'. – aagdbl

6

Lorsqu'il est utilisé dans le shell, le $ ne fait pas partie du nom, mais signale au shell qu'un nom de variable suit et doit remplacer sa valeur.

1

Pour le répertoire, vous pouvez utiliser

char* homedir = getenv("HOME"); 

ou vous pouvez utiliser

char* homedir = NULL; 
struct passwd *pw = getpwuid(getuid()); 
if (pw) 
    homedir = pw->pw_dir; 

Pour le PATH utilisé par execvp utilisation getenv("PATH")

0

Depuis HOME est une variable d'environnement vous shouldn N'y préfixez pas le signe $.

char *value,name[20]; 
scanf("%s",name); 
value=getenv(name); 
if(value == NULL) 
    printf("Not found"); 
else 
    print("value = %s",value); 

Vérifiez que vous avez inclus unistd.h et tous les fichiers d'en-tête concernés.