C getenv()Linux/Ubuntu返回NULL
我试图使用C getenv()Linux/Ubuntu返回NULL,c,linux,unix,ubuntu-12.04,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; } 并且,还可以选择使用-Wall编译,最终得到类似的结果。(测试…) #包括 #包括 内部主(空){ 字符*路径; path=getenv(“path”); 如果(
getenv(“$home”)
获取用户主目录,但它返回NULL。我做错了什么
int main(void)
{
char * path;
path = getenv("$HOME");
printf ("The current path is: %s",path);
return 0;
}
并且,还可以选择使用-Wall
编译,最终得到类似的结果。(测试…)
#包括
#包括
内部主(空){
字符*路径;
path=getenv(“path”);
如果(路径)
printf(“当前路径为:%s\n”,路径);
返回0;
}
不应该是getenv(“PATH”)
?将$
保留在环境变量名称之外。当在shell中使用时,$
不是名称的一部分,而是向shell发出信号,表示后面有一个变量名,它应该替换它的值。对于主目录,可以使用
char* homedir = getenv("HOME");
char* homedir = NULL;
struct passwd *pw = getpwuid(getuid());
if (pw)
homedir = pw->pw_dir;
或者你可以用
char* homedir = getenv("HOME");
char* homedir = NULL;
struct passwd *pw = getpwuid(getuid());
if (pw)
homedir = pw->pw_dir;
对于
execvp
使用的PATH
,请使用getenv(“PATH”)
因为HOME是一个环境变量,所以不应在其前面加上$符号
char *value,name[20];
scanf("%s",name);
value=getenv(name);
if(value == NULL)
printf("Not found");
else
print("value = %s",value);
确保包含了unistd.h和所有相关的头文件。我想使用`getenv(“$HOME”)。使用您的代码,我可以按照您所说的编译“分段错误(内核转储)”。该选项被添加到Eclipse命令中。并且仍然收到“分段错误(核心转储)”如果OP想要回家,为什么要告诉OP读出路径?如果OP想要回家,为什么要告诉OP读出路径?啊,道歉。我用PATH在我的机器上试过了。应该是
getenv(“主页”)
。