gpt4 book ai didi

C++ getenv() 包装函数未设置值

转载 作者:行者123 更新时间:2023-11-28 05:18:09 27 4
gpt4 key购买 nike

getenv() 上的 cplusplus.com 文档状态...

The pointer returned points to an internal memory block, whose content or validity may be altered by further calls to 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 在声明时它仍然是一个未初始化的指针。

这是指针,对吧?正确的?我知道它是。一定要指点我会在这些日子里弄清楚它们,但是嘿——至少我的链表可以工作了!耶!

最佳答案

您的第二个函数通过引用获取 val(int):void getEnv (int &val, const char *var) 等等按预期修改传递给它的变量。

您的第一个函数按值获取 val(a char*):void getEnv (char *val, const char *var) 所以修改 val 对传递给它的变量没有影响。一个简单的解决方案是简单地将其也作为引用:void getEnv (char *&val, const char *var)

关于C++ getenv() 包装函数未设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42168802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com