Поскольку ваш указатель изменился, и вы смотрите не на ту вещь в main()
:)
Вы передаете указатель на указатель на указатель на scandir()
. это меняет то, на что указывает указатель на указатель (я знаю, что больно читать ...).
Поскольку вы вызываете scandir()
с &eps
в своей функции, вы теряете это изменение вне функции. Значение eps
изменилось внутри вашей функции.
Чтобы лучше понять это, в текущей функции оберните вызов scandir()
операторами printf()
, показывающими, каково значение, содержащееся в eps
:
...
printf("%p\n", eps);
int nbfiles = scandir(dirname, &eps, myselector, alphasort);
printf("%p\n", eps);
...
Чтобы исправить это, измените вашу функцию на:
int list_dir(char * dirname, struct dirent *** eps)
{
int nbfiles = scandir(dirname, eps, myselector, alphasort);
if(nbfiles != -1)
{
printf("inside function: %s\n", (*eps)[0]->d_name);
return 1;
}
else
return 0;
}
И назовите это как ...
status = list_dir("/home", &eps);
в main()
. Тогда он будет отлично работать:
broach @ roach-VirtualBox: ~ $ ./test
внутренняя функция: протяжка
ОК
внешняя функция: протяжка