Ваш код не работает, потому что вы переходите через p:
dp = opendir (* p);
Поскольку opendir принимает char * в качестве аргумента, и вы указываете opendir искать этот char * в месте, куда указывает p, opendir использует "/ home / paul" в качестве своего char *.
Но p - это точное значение, которое хочет opendir. Вместо этого скажите:
dp = opendir (p);
и все будет гладко, как стекло.