А всё от того, что вы забыли #include <stdlib.h>. Плюс этот метод
работает не совсем правильно, если на исполнимом файле стоит SUID-бит
и запускается он от имени совсем другого пользователя.
>Re: [C[++]] Как узнать домашний каталог текущего пользователя?
>Плюс этот метод
>работает не совсем правильно, если на исполнимом файле стоит SUID-бит
>и запускается он от имени совсем другого пользователя.
bash-3.2$ ls -l
total 12
-rwsr-sr-x 1 root root 5549 2008-08-22 22:20 a.out
-rw-r--r-- 1 sasa users 90 2008-08-22 22:12 home.c
bash-3.2$ whoami
sasa
bash-3.2$ ./a.out
/home/sasa
Хе-хе =). Вот так и появляются ошибки =). Функция getenv находяится в stdlib.h и в вашем случае при вызове она не описана. Компилятор молча делает implicit declaration как int getenv(const char *). У вас на x86 это действительно работает, так как sizeof(int)==sizeof(char *)==4. А у меня amd64: sizeof(int)==4, а sizeof(char *)==8, поэтому у меня указатель на строку при передаче в printf урезается до 4-х байт и случается жопа.
>> Он как раз покажет домашний каталог текущего пользователя а не пользователя с чьими правами запущена программа как в предыдущем примере.
Тут зависит от того, что конкретно нужно топик-стартеру. И кстати переменная HOME устанавливается шеллом и поэтому она есть только если в дереве процессов где-то выше есть шелл.
>Функция getenv находяится в stdlib.h
Все правильно, мое упущение. У меня сработало я даже не стал заморачиваться, где объявлена эта ф-ия. В любом случае в настоящей программе -Wall сразу бы сказал об этом.
>Тут зависит от того, что конкретно нужно топик-стартеру.
Просто привел один из вариантов. Я же не говорю что это самый правильный метод :)