Программирование на C - передача аргумента переменной в opendir

Я пытаюсь сделать это:

const char *p = "/home/paul";
dp = opendir(*p);

Но это не удается со следующей ошибкой:

передача аргумента 1 из 'opendir' делает указатель из целого числа без приведения

Я в недоумении здесь, насколько я знаю, что я пытаюсь, совершенно правильно. В конце концов, я передаю const char функции, которая вводит const char. Что я делаю не так?


person user985779    schedule 08.10.2011    source источник


Ответы (3)


Функция opendir() принимает аргумент const char *, но вы отправляете ей const char. *p разыменовывает значение, на которое указывает p, и возвращает первый символ в массиве, то есть " /". Таким образом, результатом *p является значение const char "/".

p однако является const char *, поэтому измените это на:

dp = opendir(p);
person rid    schedule 08.10.2011

Ваш код не работает, потому что вы идете косвенно через p:

дп = открытый каталог (*р);

Поскольку opendir принимает char * в качестве аргумента, и вы говорите opendir искать этот char * в том месте, куда указывает p, opendir использует «/home/paul» в качестве своего char *.

Но p - это точное значение, которое хочет opendir. Вместо этого скажите:

дп = открытый каталог (р);

и все будет гладко как стекло.

person Pete Wilson    schedule 08.10.2011

const char *p = "/home/paul";
dp = opendir(*p);

объявление const char *p = "/home/paul"; означает, что "p" указывает на начало строки, где p, по сути, является адресом в памяти, где находится строка.

когда вы пишете *p, это означает, что вы обращаетесь к содержимому того места, где p указывает первый символ в строке, а именно '/'

person AndersK    schedule 08.10.2011