getenv()Linux / Ubuntu返回NULL

时间:2013-01-18 18:52:59

标签: c linux unix ubuntu-12.04

我正在尝试使用getenv("$HOME")获取用户主目录,但它返回NULL。我做错了什么?

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

    return 0;
}

5 个答案:

答案 0 :(得分:6)

$从环境变量名称中删除。在shell中使用$时,{{1}}不是名称的一部分,而是向shell发出变量名称后面的信号,并且应该替换它的值。

答案 1 :(得分:4)

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

并且,可选地,使用-Wall进行编译并最终得到类似的结果。 (测试...)

#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;
}

答案 2 :(得分:1)

不应该是getenv("PATH")

答案 3 :(得分:1)

对于主目录,您可以使用

char* homedir = getenv("HOME");

或者您可以使用

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

对于PATH使用的execvp使用getenv("PATH")

答案 4 :(得分:0)

由于HOME是一个环境变量,因此不应在$符号前加上它。

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

确保您已包含unistd.h和所有相关的头文件。