【发布时间】:2017-02-10 21:17:41
【问题描述】:
getenv() 上的 cplusplus.com 文档指出...
返回的指针指向一个内部内存块,其内容或有效性可以通过进一步调用
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,它仍然是一个未初始化的指针。
是指针,对吧?正确的?我知道它是。应该是指点这些天我会弄清楚它们,但是嘿-至少我的链接列表可以工作了!耶!
【问题讨论】:
-
你的程序不能在编译。
-
它编译得很好。在过去的一个小时里我一直在摆弄它,尝试了各种各样的东西,并且每次都能编译。
-
请注意您如何将
int用作参考,但将char*视为值。 -
是的,因为我不需要为
int分配内存。int是int,所以我可以通过引用传递它,但char必须是一个指针,以便我可以为它分配内存。 -
分配内存与此无关。在这两种情况下,您都在修改
val,但这仅在作为参考时才会产生外部影响。看我的回答。