C ++: Setenv (). Неопределенный идентификатор в Visual Studio

Посмотрите, мой код кажется правильным, согласно всей документации, которую я могу найти онлайн. Моя 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);}

};

8

Решение

Вы можете использовать _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());
9

Другие решения

Библиотека времени выполнения 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);
}
16

Пытаться _putenv вместо setenv,

msdn _putenv

1

причина, по которой вы столкнулись с ошибкой компоновки, заключается в том, что если вы посмотрите на содержимое библиотеки stdlib.h, вы обнаружите, что setenv () там не объявлен. На первый взгляд, это API-интерфейс стандарта C, но похоже, что Windows не соответствует всем стандартам. Или вы можете настроить VS для использования CRT вместо среды выполнения Windows, в этом случае, я думаю, будет определен setenv.

0
По вопросам рекламы [email protected]