Если размеры массива могут быть только постоянным значением, чем значение char d_name [...]?

Если размеры массива могут быть только постоянным значением, чем

char d_name[...]

означает?

Собственно, в файле dirent.h объявлен struct dirent. его декларация соответствует:

struct dirent{
 ....
 ino_t d_ino;
 char d_name[...];
 ...
 };

Он используется для чтения содержимого каталога по одному, то есть номера и имена файлов inode и т.д.

Я имею в виду, каков максимальный размер такого массива и сколько места статически выделяется в памяти после определения такого массива? Является ли такое определение переносимым?

1 ответ

Предполагая, что это от 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 extension --- see text */
 char d_name[...]; /* See text on the size of this array */
...
};

При ... авторы сигнализируют, что размер не фиксирован для стандартного. Каждая реализация должна выбрать фиксированный размер, например, Linux выбирает 256. Но это недействительный код.

licensed under cc by-sa 3.0 with attribution.