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

前端 未结 4 1461
春和景丽
春和景丽 2020-12-09 19:51

Look my code seems to be correct, according to all the documentation I can find online. My IDE is MS Visual Studio Xpress 4 Windows Desktop 2012, and it\'s compiler is throw

相关标签:
4条回答
  • Microsoft's runtime library doesn't support the standard setenv() function. You could use their replacement _putenv() or, for portable code, I prefer to use a simple wrapper.

    Here's my wrapper with the standard interface:

    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);
    }
    
    0 讨论(0)
  • 2020-12-09 20:00

    the reason you encountered the linkage error is that, if you take a look at the content of the library of stdlib.h, you will find that, setenv() is not declared there. At the first glance, it is a C standard API, but looks like Windows do not follow all of the standard. Or, you might be able to configure your VS to use CRT instead of Windows runtime, in that case, I think setenv will be identified.

    0 讨论(0)
  • 2020-12-09 20:03

    Try _putenv instead of setenv.

    msdn _putenv

    0 讨论(0)
  • 2020-12-09 20:17

    You can either use _putenv() which takes a string parameter as the string classSize=7;

    ostringstream classSize;
    classSize << "classSize=" << howManyInClass;
    _putenv(classSize.str().c_str());
    

    ...or (preferably) the security enhanced _putenv_s() that takes the key and the value as separate (const char*) parameters;

    ostringstream classSize;
    classSize << howManyInClass;
    _putenv_s("classSize", classSize.str().c_str());
    
    0 讨论(0)
提交回复
热议问题