我正在尝试使用getenv("$HOME")
获取用户主目录,但它返回NULL。我做错了什么?
int main(void)
{
char * path;
path = getenv("$HOME");
printf ("The current path is: %s",path);
return 0;
}
答案 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和所有相关的头文件。