5

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

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

    return 0;
}
4

5 回答 5

6

离开$环境变量名称。当在 shell 中使用时,$它不是名称的一部分,而是向 shell 发出一个变量名的信号,它应该替换它的值。

于 2013-01-18T18:55:29.293 回答
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;
}
于 2013-01-18T18:54:18.480 回答
2

不应该这样getenv("PATH")吗?

于 2013-01-18T18:54:58.940 回答
1

对于主目录,您可以使用

char* homedir = getenv("HOME");

或者你可以使用

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

按用途PATH使用execvpgetenv("PATH")

于 2013-01-18T19:53:23.597 回答
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 和所有相关的头文件。

于 2017-04-05T03:40:15.247 回答