#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%s %s\n", getpwnam("steve")->pw_name, getpwnam("root")->pw_name);
printf("%d %d\n", getpwnam("steve")->pw_uid, getpwnam("root")->pw_uid);
return EXIT_SUCCESS;
}
$ gcc main.c && ./a.out
steve steve
1000 0
在第8
行,我们try 打印用户名Steve和Root,但它打印了steve
两次.在第9
行,我们try 打印Steve和Root的UID,它成功地打印了它们.
我想找出第8
行奇怪行为的根本原因.
我知道getpwnam
返回的指针指向静态分配的内存,而像pw_name/pw_passwd/pw_gecos/pw_dir/pw_shell
这样的字段指向的内存也是静态的,这意味着这些值可以被后续调用覆盖.但仍然对这个奇怪的结果感到困惑.
这是Linux编程接口的练习8-1.添加这个,这样像我这样的人将来就可以通过搜索引擎找到这个:).而且书中的问题是错的,go here分看看修订版.