我需要编写一个shell,我的老师要求我们用
创建一个用户名char* userName = getlogin();
当我尝试编译文件时会在标题中给出警告,当我尝试运行程序时会出现段错误(当我用eclipse运行它时会打印出NULL)
所以,我的问题是char*
出了什么问题?为什么getlogin
会给我NULL
?
这是我的代码:
int main(void)
{
char input[INPUT_SIZE+1]; //user's input
char hostName[INPUT_SIZE];
//char* userName = getlogin();
char* userName = getpwuid(getuid());
if (gethostname(hostName,255)< 0) {
printf("there is no hostname\n", hostName);
exit (200);
}
int code;
code=0;
while(1)
{
printf("%d %s@%s$ ",code,userName,hostName);
fgets(input, INPUT_SIZE, stdin);
if(strcmp("\n",input) == 0)
continue;
printf("it didn't continue\n");
if(strcmp("exit\n",input)==0)
{
printf("you exit\n");
continue;
//exit(127);
}
printf("it didnt go to exit\n");
}
return EXIT_SUCCESS;
}
答案 0 :(得分:0)
getpwuid
返回指向struct passwd
的指针,而不是char*
。 getlogin
会返回char*
。但是,如果您在尝试使用char*
初始化int
时遇到错误,可能是因为getlogin
未声明且编译器假定其类型为{{ 1}}。你是否包含了定义这些功能的标题? <{1}}应包含在
int
答案 1 :(得分:0)
你甚至没有打电话给getlogin()
,你注释掉了那条线!取消注释char* userName = getlogin();
并注释掉下一行,它将起作用。