2013-07-10 3 views
0

Как использовать C/C++ для установки варианта среды?
Я использовалC вариант среды установки

putenv() 

, но после того, как я запускал код, вариант среды ничего не изменится.

Код:

#include <stdlib.h> 
#include <iostream> 
#include <string.h> 
using namespace std; 
int main() 
{ 
    char a[128]; 
    char b[256]; 

    char all[512]; 
    cin>>a; 
    cin>>b; 
    cout<<'\n'; 
    cout<<a<<'\n'; 
    cout<<b<<'\n'; 

    strcpy(all,a); 
    strcat(all,"="); 
    strcat(all,b); 
    cout<<all<<'\n'; 
    cout<<putenv(all); 
} 

Я попробовал функцию "SetEnv()" и раньше, но сообщение об ошибке:

ошибка: 'SetEnv' не был объявлен в этой области

Моя ОС Окна 7.

IDE Code :: блок

+0

http://msdn.microsoft.com/en-us/library/83zh4e6k%28v=vs.80%29.aspx "влияет только на среду, локальную для текущего процесса, вы не можете использовать их для изменения среда командного уровня ". – BLUEPIXY

+0

Это очень * очень странный код C. Возможно, у вас есть вопрос, ошибочный? –

+0

To Cody Grey Большое спасибо, я буду много работать – Ken

ответ

2

I tried the function "setenv()" before but the error message:

error: 'setenv' was not declared in this scope 

Функция setenv заявлена ​​в заголовке stdlib.h. Вы должны включить этот заголовок для того, чтобы вызвать функцию:

#include <stdlib.h> 

Если вы абсолютно необходимо использовать одну из этих функций, я бы рекомендовал использовать setenv в предпочтении к putenv. Джонатан Леффлер более подробно обсуждает обоснование here.

Я лично предпочел бы назвать функцию Win32 SetEnvironmentVariable, считая, что и setenv, и putenv не являются переносными в любом случае.

Но я не совсем уверен, почему вы считаете, что вам необходимо изменить окружающую среду в первую очередь. Вопрос не объясняет, какую проблему вы пытаетесь решить, и не говорите, что вы ожидали изменить.

Помните, что обе эти функции изменяют только среду для вызывающего процесса. Они не влияют на глобальную системную среду.

Для целей тестирования вам нужно будет установить переменную окружения по вашему выбору, а затем использовать что-то вроде getenv или GetEnvironmentVariable для извлечения и печати текущих переменных среды для процесса, чтобы убедиться, что вы правильно настроены.

+0

Мне нужно включить библиотеку , но я действительно не знаю, почему setenv получил это сообщение об ошибке и почему putenv ничего не менял – Ken

+0

и мне действительно не нравится использовать windows.h.it делает мою программу запущенной slow – Ken

+0

Невозможно, чтобы включение заголовка могло замедлить работу вашей программы. Только объявления, которые вы фактически используете, связаны с вашим приложением. И даже тогда все функции Windows находятся в DLL, поэтому в ваш код скомпилируется только одна команда.Конечно, не более, чем функции в stdlib.h. Если вы имеете в виду, что это замедляет компиляции, вы должны изучить использование предварительно скомпилированных заголовков. Файлы системного заголовка, такие как Windows.h, являются идеальным местом для использования предварительно скомпилированных заголовков. –

1

putenv() влияет только на текущий процесс. Естественно, что переменные среды остаются неизменными, если вы проверите их ПОСЛЕ запуска кода.

+0

Большое спасибо за решение моей проблемы – Ken

Смежные вопросы