在c++中正确设置局部环境变量
Proper setting a local environment variable in C++
在我的代码中,我使用以下代码:
putenv("TZ=UTC");
tzset();
设置时区。
putenv()
的声明(这个答案建议设置环境变量):
int putenv(char *string);
我使用的构建系统设置编译器标志-Wall -Wextra -Werror -std=c++0x
,由于我得到的错误:
timeGateway.cpp:80:18: error: ISO C++ forbids converting a string constant to 'char*' [-Werror=write-strings]
putenv("TZ=UTC");
^
我知道这个错误可以通过使用:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wwrite-strings"
putenv("TZ=UTC");
#pragma GCC diagnostic pop
但这是非常丑陋的。
我的问题:在c++中设置环境变量的正确方法是什么?
字符串文字是const
,它的类型是const char[]
(对于"TZ=UTC"
,它将是const char[7]
,包括末尾的空字符' '
),它不能直接赋值给c++ 11中的(非const) char*
。
你可以为它构造一个新的char
数组。
char str[] = "TZ=UTC"; // initialize a char array, which will contain a copy of the string "TZ=UTC"
putenv(str);
putenv
通常允许在调用putenv之后更改字符串,这实际上会自动更改环境。这就是为什么原型声明了一个char *
而不是const char *
,但是系统不会改变传递的字符串。
所以这是const cast
的一个罕见的正确用例:
putenv(const_cast<char *>("TZ=UTC"));
或者,您可以使用接受const char *
参数的setenv
:
setenv("TZ", "UTC", 1);
相关文章:
- docker 构建失败:无法设置环境变量
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- 在编译时为运行时设置环境变量
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- 在 Visual Studio 2017 C++项目中设置调试/运行环境变量
- 以编程方式设置全球环境变量
- 将 c++ 代码中的当前用户环境变量设置为对其他进程(如 cmds)可见
- TCL文件无法获取通过代码设置的环境变量
- 如何使用CMakeLists.txt为我的可执行文件设置bash中的环境变量
- 为特定过程的特定运行设置环境变量
- 退出后从C++程序永久设置环境变量
- 为英特尔C++编辑器"GCC not found"设置环境变量时出现问题
- php-cgi环境变量设置
- 如何在Qt中以编程方式为当前进程设置环境变量
- 我已经设置了 CPUPROFILE 环境变量和链接的 -lprofiler。为什么 gperftools 不启动探查器?
- 如何在安装MinGW (Windows 32位)时设置环境变量PATH
- 从c++中为Batch设置临时环境变量
- 在c++中正确设置局部环境变量
- 更改/设置MINGWDIR环境变量究竟是做什么的?