提问者:小点点

如何从mingw、c++(或c)中获取和设置环境变量


我正在编写一个程序,需要从mingw为当前进程设置环境变量(在使用system(...)-call时可用于子进程)。

我知道如何在linux和windows中使用msvc和clang。然而,我找不到任何关于如何使用MingW-G++实现这一点的好的例子。

如何实现具有这种行为的函数?

// Example usage:
void setVar(std::string name, std::string value) {
    // How to do this
}

std::string getVar(std::string name) {
    // ... and this
}

如果您想用c语言回答,请省略std::string:)

编辑:

当使用setenv(linux方式)时,我得到:

src/env.cpp: In function 'void appendEnv(std::string, std::string)':
src/env.cpp:46:5: error: 'setenv' was not declared in this scope; did you mean 'getenv'?
   46 |     setenv(name.c_str(), value.c_str(), 1);
      |     ^~~~~~
      |     getenv

当使用_putenv_s(我在windows上用于msvc和clang的方式)时,我得到了。

src/env.cpp: In function 'int setenv(const char*, const char*, int)':
src/env.cpp:16:12: error: '_putenv_s' was not declared in this scope; did you mean '_putenv_r'?
   16 |     return _putenv_s(name, value);
      |            ^~~~~~~~~
      |            _putenv_r

共1个答案

匿名用户

从评论中得到启发,我在putenv上找到了这个问题

并设法将这个原型应用程序组合在一起:


#include <cstdlib> // For system(...)

#ifdef __MINGW32__
extern int putenv(char *); // Not defined by mingw
#endif

int main() {
    putenv(const_cast<char *>("x=10"));
    system("set"); // Output variables to se if it works

    return 0;
}

结果输出:

....
x=10

谢谢你的帮助!

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(mingw|c++|c|中|获取|设置|环境变量)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?