C++:Setenv().Visual Studio中未定义的标识符

C++: Setenv(). Undefined identifier in Visual Studio

本文关键字:未定义 标识符 Studio Visual Setenv C++      更新时间:2023-10-16

根据我在网上找到的所有文档,我的代码似乎是正确的。我的IDE是MS Visual Studio Xpress 4 Windows Desktop 2012,它的编译器正在抛出错误:

CCD_ 1。

帮帮我!!!

#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);}
};

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(),它将字符串参数作为字符串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());

尝试_putenv而不是setenv

msdn_putenv

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