Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
Nostalgia
0 / 0 / 0
Регистрация: 06.03.2009
Сообщений: 19
#1

Переменная окружения PATH - C++

17.10.2010, 14:20. Просмотров 2576. Ответов 5
Метки нет (Все метки)

напишите пожалуйста как будет выглядеть прога которая дополняет значение PATH именем каталога, указанным в командной строке
Пишу на С.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2010, 14:20     Переменная окружения PATH
Посмотрите здесь:

Переменные окружения C++
C++ Не удалось найти в среде окружения сборки команду: make
C++ получение окружения из psp
C++ PATH
C++ переменная среды path.
C++ PATH в string
Вместо переменных окружения -> переменная из командной строки C++
C++ Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
C++ Как выводить переменные окружения и аргументы командной строки?
Переменная или переменная и условие C++
C++ Вывести переменные окружения передаваемые через командную строку
C++ Добавить новую переменную окружения с помощью SetEnvironmentVariable

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
17.10.2010, 16:05     Переменная окружения PATH #2
Юзать putenv(), getenv()
Но программа не будет работать - изменение переменной откружения будет видно только в потомках
Но не будет в родителях данной программы
Nostalgia
0 / 0 / 0
Регистрация: 06.03.2009
Сообщений: 19
17.10.2010, 21:44  [ТС]     Переменная окружения PATH #3
вопросы:
1.как осуществить копирование аргумента с командной строки в конец переменной окружения PATH.
мои предложения:
putenv(PATH=argc(NULL-1))
2.нужно ли как то обьявлять переменную окружения PATH ?
3.нужно ли обьявлять putenv и как.

Добавлено через 1 час 31 минуту
Цитата Сообщение от Nostalgia Посмотреть сообщение
вопросы:
1.как осуществить копирование аргумента с командной строки в конец переменной окружения PATH.
мои предложения:
putenv(PATH=argc(NULL-1))
2.нужно ли как то обьявлять переменную окружения PATH ?
3.нужно ли обьявлять putenv и как.
вот мой код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
int main (int argc, char* argv[])
 
{
char** var;
char** PATH;
putenv(PATH=argv[NULL-1]);
for (var=PATH; *var!=NULL; ++var)
printf ("%s\n",*var);
return 0;
}
в итоге я хочу получить значение переменной окружения PATH. в конец этого значения должен добавлятся аргумент (каталог), который я ввожу в командную строку. тоесть такое условие: если что то есть в командной строке то нужно его добавить в конец строки PATH(через двоеточие или как там, я новичек), а если в командной строке ничего - то соответственно ничего не добавляется.

вообщем что я вам ломаю голову.. задание звучит так:
Дополнить значение переменной окружения PATH путем(именем каталога), указанным в командной строке запуска программы. {исключить повторы}{обработать все аргументы аналогичным образом}
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.10.2010, 02:32     Переменная окружения PATH #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#define _XOPEN_SOURCE
 
#include <stdio.h>
#include <stdlib.h>
 
#define ENVVARMAX  1000
 
int main(int argc, char *argv[])
{
    const char *path;
    char newpath[ENVVARMAX], *append;
    
    if (argc == 1)
        return 1;
 
    path = getenv("PATH");
    if (path == NULL)
        return 1;
    
    append = argv[1];
    
    (void) sprintf(newpath, "%s=%s%c%s", "PATH", path, ':', append);
    printf("%s" "\n", newpath);
    
    if (putenv(newpath) < 0)
        return 1;
    
    if ((path = getenv("PATH")) != NULL)
        printf("%s" "\n", path);
    
    return 0;    
}
Nostalgia
0 / 0 / 0
Регистрация: 06.03.2009
Сообщений: 19
22.10.2010, 00:14  [ТС]     Переменная окружения PATH #5
А данная программа проверяет на ошибки ?

Добавлено через 24 минуты
что делает первая строка мне вообще непонятно, без неё тоже работает, можно както без неё ?((
это тоже непонятно #define ENVVARMAX 1000 ((
и newpath[ENVVARMAX], *append;

можно коментарии пожалуйста ((
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.10.2010, 04:13     Переменная окружения PATH #6
первая строка нужна для putenv, putenv не является стандартной функцией и без той строки её прототип не вставляется, а если прототип не вставляется, то получается неявное объявление вида extern int f();
неявные объявления ушли в прошлое, они оставлены только для того, чтобы старые программы не нужно было переписывать, если там такие объявления используются

Цитата Сообщение от Nostalgia
А данная программа проверяет на ошибки ?
проверяет

вот это, например, проверка "а не запущена ли программа без аргументов"
C
1
2
    if (argc == 1)
        return 1;
Цитата Сообщение от Nostalgia
это тоже непонятно #define ENVVARMAX 1000
это сделано специально, таким образом, определив константы вверху программы, мы можем их везде использовать и легко влиять на широту программы
с помощью одной этой строки мы можем задавать максимальную длину для пути (environment variable maximal)

C
1
char newpath[ENVVARMAX], *append;
перед компиляцией сначала ENVVARMAX заменится на соответствующее значение, вверху написано 1000 - значит на 1000
получится char newpath[1000] - символьный массив для строки из 999 символов + нуль-символ

это одно и то же
C
1
char newpath[ENVVARMAX], *append;
C
1
2
    char newpath[ENVVARMAX];
    char *append;
C
1
(void) sprintf
а знаешь что вот это такое ?
короче sprintf() возвращает значение типа int (ну, это целое число от -... до +...), так вот, чтобы показать, что мы это число не хотим использовать, мы его приводим к типу void с помощью операции приведения типа (новый_тип)
этим мы показали, что не забыли, что sprintf() может вернуть отрицательное значение

C89
Returns

The sprintf function returns the number of characters written in
the array, not counting the terminating null character.
C99
Returns
3
The sprintf function returns the number of characters written in the array, not
counting the terminating null character, or a negative value if an encoding error occurred.
Yandex
Объявления
22.10.2010, 04:13     Переменная окружения PATH
Ответ Создать тему
Опции темы

Текущее время: 10:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru