2015-12-15 8 views
0

Моя школа хочет, чтобы я реализовал setenv() стандарт Поведение библиотеки. Мне не разрешено использовать setenv() для этой реализации. Как я могу это сделать?Как мне настроить собственный setenv()?

+1

Что случилось с setenv? –

+0

Это в stdlib, должно работать, нет? –

+0

Я не могу использовать setenv в своей школьной форте, используя его – Myranova

ответ

2

Во многих реализациях языка программирования 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() для этой цели. Поскольку это домашнее задание, я не собираюсь приводить дополнительные сведения.

+0

Большое спасибо за это решение – Myranova

+0

@Myranova Пожалуйста, учтите, что этот ответ принят, если он разрешил вашу проблему. – fuz

+0

ok ill try first – Myranova