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

setenv()Microsoft のランタイム ライブラリは、標準関数をサポートしていません。それらの代替品を使用することもできますが_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 はすべての標準に準拠していないように見えます。または、Windows ランタイムの代わりに CRT を使用するように VS を構成できる場合があります。その場合、setenv が識別されると思います。

于 2014-12-02T07:16:23.697 に答える