程序通过Ubuntu上的C程序显示所有登录用户?

我有一个名为allloggedin.c程序,其目的是显示所有登录的用户。

每当我尝试在终端上运行它(使用gcc)时,它会给出错误“Segmentation fault(core dumped)”。

 #include #include #include int main(void) { struct utmp *n; char *a; int i; setutent(); n=getutent(); while(n!=NULL) { if(n->ut_type==7) { printf("%9s",n->ut_user); printf("%12s",n->ut_line); printf(" "); for(i=4;iut_host); printf(")"); printf("\n"); } n=getutent(); } } 

有人可以解释一下这个程序吗?

你得到的分段错误是由于行:

 printf("%c",a[i]); 

由于您没有初始化指针a ,它可以指向任何地址,当您取消引用它时可能会导致分段错误。

我不确定你要在for循环中打印什么,所以我完全从代码中删除它。

这是代码的清理版本:

 #include #include #include int main(void) { struct utmp *n; setutent(); n=getutent(); while(n) { if(n->ut_type==USER_PROCESS) { printf("%9s%12s (%s)\n", n->ut_user, n->ut_line, n->ut_host); } n=getutent(); } return 0; } 

我用适当的宏USER_PROCESS替换了数字7。 此外,您可以将所有打印放在一个printf调用中。

所以程序基本上做的是为每个用户获取utmp结构并以一种奇特的方式打印它。

有关所用函数和utmp结构的更多信息,您可以查看utmp.h参考。