在我正在处理的旧Windows应用程序中,我需要从环境变量获取路径,然后附加到其上以构建文件路径.所以代码看起来像这样:
static std::string PathRoot; // Private variable stored in class' header file char EnvVarValue[1024]; if (! GetEnvironmentVariable(L"ENV_ROOT", (LPWSTR) EnvVarValue, 1024)) { cout << "Could not retrieve the ROOT env variable" << endl; return; } else { PathRoot = EnvVarValue; } // Added just for testing purposes - Returning -1 int foundAt = PathRoot.find_first_of(':'); std::string FullFilePath = PathRoot; FullFilePath.append("\\data\\Config.xml");
ENV_ROOT的环境值在Windows系统控制面板中设置为"c:\ RootDir".但是当我运行程序时,我一直在FullFilePath中输入一个字符串,该字符串缺少冒号字符串以及根文件夹中的任何内容.它看起来像这样:" c\data\Config.xml ".
使用Visual Studio调试器,我在传递了GetEnvironmentVariable行之后查看了EnvVarValue,它向我展示了一个似乎具有我期望的所有字符的数组,包括冒号.但是在将它分配给PathRoot之后,将鼠标移到PathRoot上只会显示C并向下钻取它会显示一些关于坏ptr的信息.正如我所指出的那样,find_first_of()调用找不到冒号char.当附加完成时,它只保留初始C并删除RootDir值的其余部分.
所以似乎有一些关于冒号字符构造函数混乱的冒号字符.是的,我可以通过多种方式解决这个问题,方法是将冒号从env变量中删除,然后在代码中添加它.但我更愿意找到一种方法让它从环境变量中正确读取和使用.