Посмотрите, мой код кажется правильным, согласно всей документации, которую я могу найти онлайн. Моя IDE — MS Visual Studio Xpress 4 Windows Desktop 2012, и ее компилятор выдает ошибку:
Error 1 error C3861: 'setenv': identifier not found e:\users\owner\documents\visual studio 2012\projects\project1\project1\source1.cpp 18 1 Project1
,
Помоги мне!!!
#include <windows.h>
#include <sstream>
#include <ostream>
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
using namespace std;
int howManyInClass = 0;
int main(){
long checklength = sizeof(getenv("classSize"))/sizeof(*getenv("classSize"));
if (checklength==0){
cout<<"Please enter the ammount of students in your class";
cin>> howManyInClass;
cin.ignore();
setenv("classSize", howManyInClass, 1);}
};
Вы можете использовать _putenv()
который принимает строковый параметр в качестве строки classSize=7
;
ostringstream classSize;
classSize << "classSize=" << howManyInClass;
_putenv(classSize.str().c_str());
…или (предпочтительно) усиленная безопасность _putenv_s()
который принимает ключ и значение как отдельные (const char *) параметры;
ostringstream classSize;
classSize << howManyInClass;
_putenv_s("classSize", classSize.str().c_str());
Библиотека времени выполнения Microsoft не поддерживает стандарт setenv()
функция. Вы могли бы использовать их замену _putenv()
или, для переносимого кода, я предпочитаю использовать простую оболочку.
Вот моя обертка со стандартным интерфейсом:
int setenv(const char *name, const char *value, int overwrite)
{
int errcode = 0;
if(!overwrite) {
size_t envsize = 0;
errcode = getenv_s(&envsize, NULL, 0, name);
if(errcode || envsize) return errcode;
}
return _putenv_s(name, value);
}
Пытаться _putenv
вместо setenv
,
причина, по которой вы столкнулись с ошибкой компоновки, заключается в том, что если вы посмотрите на содержимое библиотеки stdlib.h, вы обнаружите, что setenv () там не объявлен. На первый взгляд, это API-интерфейс стандарта C, но похоже, что Windows не соответствует всем стандартам. Или вы можете настроить VS для использования CRT вместо среды выполнения Windows, в этом случае, я думаю, будет определен setenv.