如果数组大小只能是一个常量值,那么
char d_name[...] 卑劣?
实际上,在dirent.h文件中声明了一个struct dirent。它的声明如下:
struct dirent{
....
ino_t d_ino;
char d_name[...];
...
};它用于一次读取一个目录内容,即inode编号和文件名等。
我的意思是,这样的数组的最大大小是多少,一旦定义了这样的数组,内存中静态分配了多少空间?这样的定义可移植吗?
发布于 2012-03-10 17:56:48
假设它来自struct linux_dirent,那么它实际上是char d_name[]:
struct linux_dirent {
unsigned long d_ino; /* Inode number */
unsigned long d_off; /* Offset to next linux_dirent */
unsigned short d_reclen; /* Length of this linux_dirent */
char d_name[]; /* Filename (null-terminated) */
}它被称为灵活的数组成员,使用malloc可以为结构分配更多的内存,从而使d_name具有可变的大小。
编辑
OP引用的文本:
目录条目由结构dirent表示
struct dirent { ...ino_t d_ino;/* XSI扩展-查看文本*/ char d_name ...;/*查看此数组大小的文本*/ ... };
对于...,作者表示每个标准的大小都不是固定的。每个实现都必须选择固定的大小,例如Linux选择256。但这不是有效的代码。
https://stackoverflow.com/questions/9645472
复制相似问题