Гость Опубликовано 24 апреля, 2005 Жалоба Опубликовано 24 апреля, 2005 Нужна помощь с лабой...(= Задание: создайте программу, которая будет производить проверку, установлена ли указанная с терминала переменная окружения; если она не установлена, выдавать приглашение на ее установку и устанавливать заданное с терминала значение... Я думал как сделать: 1. ввод с терминала значения. Это значение записать как строку. 2. командой getenv сделать проверку значения, если никакого значения нет, то использовать команду putenv. Если есть, то просто вывести значение переменной окружения. 3. вводить значение и командой putenv записывать его в качестве значения перменной, имя которой введено как значение в пункте 1. Но putenv вообще с динамической памятью плохо работает, а по идее нужна динамическая строка вида par[1]=par[2]. В общем не знаю как сделать установку нового значения в данном случае... Надеюсь на Вашу помощь... Цитата
Гость Опубликовано 28 апреля, 2005 Жалоба Опубликовано 28 апреля, 2005 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char buf[10240]=""; char* ptr; fgets(buf,sizeof(buf),stdin); while(*buf && buf[strlen(buf)-1] <= 32) buf[strlen(buf)-1]=0; if(buf[0] == 0){ fprintf(stderr,"Invalid name\n");exit(EXIT_FAILURE);} if((ptr=getenv(buf)) != NULL){ printf("Already in environment" "%s\n",ptr);exit(EXIT_SUCCESS); } ptr = buf + strlen(buf); if(ptr >= buf+sizeof(buf)-2){ fprintf(stderr,"Name too long. Unable to add\n"); exit(EXIT_FAILURE); } *ptr++='='; fgets(ptr,buf+sizeof(buf)-ptr,stdin); while(*ptr && ptr[strlen(ptr)-1] <= 32) ptr[strlen(ptr)-1]=0; putenv(strdup(buf)); } Мы читаем строку из stdin. Мы игнорируем EOF, т.к. ставим buf в "". Если getenv возврашает не NULL, мы выводим это значение. Также мы отсекаеи завершающие \nы,\rы и ' ' если они там оказались. Далее мы ставим указатель на последний байт строки, проверяем есть ли место для '=', читаем из STDIN еще одну строку, опять игнорируем EOF(если произоцдет - создастся переменная со значением ""), пихаем в env копию статической переменной. putenv плохо работает со статической памятью, а с димнамической... тоже плохо(free()ть кто будет? exit()?). Вроде так. Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.