上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
版本回来了,我的意思是什么:如果我不要在声明时初始化*textMode
它仍然是未初始化的指针。
这是指针,对不对?对?我知道它是。得指点。我会在这些日子里找出他们的一个,但是嘿 - 至少我让我的链表工作了!好极了!
你的程序不能编译。 – Shravan40
它编译得很好。我在过去的一个小时里一直在摆弄它,尝试各种各样的东西,并且每次都编译。 – alanlittle
请注意,您如何将'int'作为参考,但是通过值来获取'char *'。 – Kevin