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

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

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

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

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

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

переменная среды path. - C++
Привет, у меня такая проблема-нечайно стер данные в переменной среде path, теперь когда установил dev-c++ у меня вначале пишет что он не...

Вместо переменных окружения -> переменная из командной строки - C++
Короче ребята такое дело, надо переделать так что бы вместо переменных окружения надо что бы вместо переменных окружения программа...

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз - C++
Исходники: /* main.cpp */ #include "hider.h" int main(void) { return 0; } /* foo.cpp */

Переменная или переменная и условие - C++
Привет всем. Стало интересно. Есть предположим функция. В ней ссылкой передается аргумент Status; Как лучше сделать? ...

Переменные окружения - C++
Помгите пожалуйста, надо настроить переменные окружения для Microsoft SDK. Кто что может скажите по этому поводу!!

получение окружения из psp - C++
Добрый день, насколько я знаю, что с помощью ассемблера я могу из psp получить служебную информацию о программе, но как это сделать с...

5
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
17.10.2010, 16:05 #2
Юзать putenv(), getenv()
Но программа не будет работать - изменение переменной откружения будет видно только в потомках
Но не будет в родителях данной программы
0
Nostalgia
0 / 0 / 0
Регистрация: 06.03.2009
Сообщений: 19
17.10.2010, 21:44  [ТС] #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 путем(именем каталога), указанным в командной строке запуска программы. {исключить повторы}{обработать все аргументы аналогичным образом}
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.10.2010, 02:32 #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;    
}
0
Nostalgia
0 / 0 / 0
Регистрация: 06.03.2009
Сообщений: 19
22.10.2010, 00:14  [ТС] #5
А данная программа проверяет на ошибки ?

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

можно коментарии пожалуйста ((
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.10.2010, 04:13 #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.
0
22.10.2010, 04:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2010, 04:13
Привет! Вот еще темы с ответами:

Добавить новую переменную окружения с помощью SetEnvironmentVariable - C++
Имеется консольное приложение в многобайтовой кодировке #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; int...

PATH - C++
Как в С++ добавить в PATH какуюнибудь папаку?

Как выводить переменные окружения и аргументы командной строки? - C++
Доброго времени суток) Может рассказать как выводить переменные окружения и аргументы командной строки? Задание звучит примерно так:...

Не удалось найти в среде окружения сборки команду: make - C++
Qt Creator Не удалось найти в среде окружения сборки команду: make Возникла ошибка при сборке проекта Hello (цель: Настольный...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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