Моя школа хочет, чтобы я реализовал setenv()
стандарт c Поведение библиотеки. Мне не разрешено использовать setenv()
для этой реализации. Как я могу это сделать?Как мне настроить собственный setenv()?
ответ
Во многих реализациях языка программирования C и особенно на POSIX среда доступна из глобальной переменной environ
. Вы, возможно, потребуется объявить его вручную, так как это не указано в любом стандартном заголовочном файле:
extern char **environ;
environ
указывает на NULL
-завершённый массив указателей на variable=value
строк. Например, если среда имеет переменные foo
, bar
и baz
, записи в environ
может быть:
environ[0] = "foo=a";
environ[1] = "bar=b";
environ[2] = "baz=c";
environ[3] = NULL;
Чтобы изменить окружающую среду без использования setenv()
или putenv()
функции, проверьте ключ, который вы хотите установить уже существует. Если это так, перезапишите запись для этого ключа. Кроме того, вам нужно скопировать содержимое environ
в новый массив и добавить новую запись в ее конец. Вы можете использовать malloc()
или calloc()
и memcpy()
для этой цели. Поскольку это домашнее задание, я не собираюсь приводить дополнительные сведения.
Что случилось с setenv? –
Это в stdlib, должно работать, нет? –
Я не могу использовать setenv в своей школьной форте, используя его – Myranova