- 编译器可以确定 ent -> d_name 的大小吗?
编译器不需要。
在 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() 返回一个指向不同结构的指针。(这个结构可能是静态分配的;不要试图释放(3)它。)
显然readdir
为您分配内存。
另请阅读:Why does the C readdir man page say to not call free on the static assigned result struct