我对这里发生的事情感到很困惑。
while ( (ent = readdir(dir)) != NULL)
{
char *name = ent -> d_name;
....
}
这只是扫描目录的一些基本代码。很公平。但我无法理解这是如何编译的,因为编号如何以...的名义确定ent的大小 - > d_name?在编译时没有人知道它,并且必须为此分配内存,对吗?编译器是自动malloc()为我这个或什么? 如果相关,我在Ubuntu下使用GCC。
提前致谢。
答案 0 :(得分:3)
编译器不需要。
在Linux上,dirent
结构定义如下:
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* offset to the next dirent */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all file system types */
char d_name[256]; /* filename */
};
在此之后
char *name = ent -> d_name;
name
只指向数组ent->d_name
的第一个元素。
下面
while ( (ent = readdir(dir)) != NULL)
readdir
返回指向dirent
结构的指针。
这就是男人所说的:
成功时,readdir()返回指向dirent结构的指针。 (这个 结构可以静态分配;不要试图释放(3)它。)
显然readdir
为你分配内存。
另请阅读:why does the C readdir man page say to not call free on the static allocated result struct
答案 1 :(得分:1)
也许我错过了显而易见的事情,但如果name
是char *
且ent->d_name
是char *
(它们应该用于正确输入),那么肯定所有发生的事情是指向char
(name
)块的一个指针被设置为指向另一个指针(char
)指向的ent->d_name
块。
没有内存分配,在我看来。