getenv()
状態にcplusplus.comドキュメント...C++のgetenv()ラッパー関数は、値を設定しない
ポインタがその内容または有効性をさらに呼び出しによって変更することができる内部メモリブロックにポイントを返さ〜
getenv
...「コンテンツを保持したい場合はコピーしてください」私はいくつかの変数を取得する必要があるためので、私は少しラッパー関数のカップルを書いた:
#include <iostream>
#include <string.h>
using namespace std;
void getEnv (char *val, const char *var) {
val = nullptr;
char *enVar = getenv(var);
if (enVar != nullptr) {
val = new char[strlen(enVar) + 1];
strcpy(val, enVar);
}
}
void getEnv (int &val, const char *var) {
val = -1;
char *enVar = getenv(var);
if (enVar != nullptr) {
val = atoi(enVar);
}
}
int main() {
char *textMode = nullptr;
int cLen = 0;
getEnv(cLen, "CONTENT_LENGTH");
cout << cLen << endl << endl;
getEnv(textMode, "TEXT_MODE");
if (textMode == nullptr)
cout << "Not set.";
else
cout << "[" << textMode << "]<br>\n";
return 0;
}
予想通りint
バージョンでは動作しますが、私は戻ってchar
バージョンから何を取得し、私は何も意味しない:I場合*textMode
を宣言時に初期化しないでください。初期化されていないポインタのままです。
これは正しいポインタですか?右?私はそれが分かっています。ポインタが必要です。私はこれらのうちの1つを理解するだろうが、ちょっと - 少なくとも私は仕事にリンクされたリストを持っている!わーい!
あなたのプログラムがコンパイルされていない必要があります。
は、ここで私が考えていたものです。 – Shravan40
それはうまくコンパイルされます。私は過去1時間それを振っていて、さまざまなことを試してきました。毎回コンパイルされています。 – alanlittle
'int'を参考にして' char * 'を値として取る方法に注目してください。 – Kevin