【发布时间】:2020-06-19 06:51:29
【问题描述】:
我在初始化全局变量时遇到问题。我的 C++ 有点生锈,所以我不记得我的代码无法正常工作的原因。
文件.cpp
const char * write_path = &(std::string(getenv("FIFO_PATH")) + "/pythonread_fifo")[0];
int main(int argc, char**argv)
{
std::cout << "printing a string: ";
std::cout << (std::string(getenv("FIFO_PATH")) + "/pythonread_fifo\n");
std::cout << "printing a const char*: ";
std::cout << &(std::string(getenv("FIFO_PATH")) + "/pythonread_fifo")[0] << std::endl;
std::cout << "printing write_path:";
std::cout << write_path;
std::cout << write_path << std::endl;
std::cout << "printing FIFO_PATH:" << std::string(getenv("FIFO_PATH"));
}
作为前提: FIFO_PATH 已正确添加到 bashrc,并且可以正常工作,但是,当我启动该程序时,输出如下:
printing a string: /home/Processes/FIFOs/pythonread_fifo
printing a const char*: /home/Processes/FIFOs/pythonread_fifo
printing write_path:
printing FIFO_PATH:/home/Processes/FIFOs
如您所见,write_path 完全是空的。
对我来说更奇怪的是,如果我将 write_path 定义为:
const char * write_path = "/home/Processes/FIFOs/pythonread_fifo";
然后write_path 不再为空,它被正确初始化并打印出来了。
我该如何解决这个问题?或者至少,为什么会这样?
编辑:这个问题与write_path 是全球性的无关。我将定义放在 main 中,当我尝试打印 write_path 时,它仍然是空的
【问题讨论】:
标签: c++ initialization global lifetime temporary