Программирование на C - передача аргумента переменной в opendir - PullRequest
1 голос
/ 09 октября 2011

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 09 октября 2011

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

p однако равен a const char *, поэтому измените его на:

dp = opendir(p);
0 голосов
/ 09 октября 2011
const char *p = "/home/paul";
dp = opendir(*p);

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

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

0 голосов
/ 09 октября 2011

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

dp = opendir (* p);

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

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

dp = opendir (p);

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

...