> 没有人指点吗?
> 知道的人能提醒一下吗?
太心急了一点了吧?
熬夜上网的人,到这里来的不多,更多的都去聊天了 :-)
关于这个问题,我的个人想法是
它使用了静态变量(或者是全局变量?),并且返回它的指针给你了。
你的猜测基本是对的,就是它预分配了空间,并且每次返回的都是同一块地方
但是你说的有一点错误:内存不是在头文件中分配的。
看这个代码
#include <pwd.h>
#include <stdio.h>
#include <sys/types.h>
int main()
{
struct passwd *pw = getpwnam("nobody");
printf("pw = %p
", pw);
struct passwd *pw2 = getpwnam("root");
printf("pw2 = %p
", pw2);
printf("pw = %p
", pw);
printf("pw->name = %s
", pw->pw_name);
printf("pw2->name = %s
", pw2->pw_name);
}
它的输出结果就是
pw = 0x42133a78
pw2 = 0x42133a78
pw = 0x42133a78
pw->name = root
pw2->name = root
先后两次调用返回的是同一个指针。
这种函数很多,如get...by...系列,
这些函数是非线程安全的——如果你不知道什么是线程,就当我没说。
要在线程中使用这些函数,应该使用它们的线程安全版本,
就是后面加上一个_r后缀的函数,如getpwnam_r, getpwuid_r等
这些函数一般都需要你自己先分配好内存传给它使用——相对不方便了。