18

根据我可以在网上找到的所有文档,看看我的代码似乎是正确的。我的 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);}

};
4

4 回答 4

32

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);
}
于 2014-05-12T18:25:22.360 回答
16

您可以使用_putenv()which 将字符串参数作为字符串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());
于 2013-06-23T06:17:46.610 回答
1

尝试_putenv代替setenv.

msdn _putenv

于 2013-06-23T06:04:26.360 回答
0

您遇到链接错误的原因是,如果您查看 stdlib.h 库的内容,您会发现 setenv() 并没有在此处声明。乍一看,它是一个 C 标准 API,但看起来 Windows 并没有遵循所有的标准。或者,您可以将 VS 配置为使用 CRT 而不是 Windows 运行时,在这种情况下,我认为 setenv 将被识别。

于 2014-12-02T07:16:23.697 回答