gpt4 book ai didi

c++ - 环境变量在 char* 中如何将其获取到 std::string

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:04 29 4
gpt4 key购买 nike

我正在使用 GetEnvironmentStrings() 在 win32 中检索环境变量。它返回一个 char*

我想在这个字符串(字符指针)中搜索特定的环境变量(是的,我知道我可以使用 GetEnvironmentVariable() 但我这样做是因为我还想打印所有控制台上的环境变量也是如此——我只是在摆弄)。

所以我想我会将 char* 转换为 std::string 并在其上使用查找(我知道我也可以使用 c_string 查找函数,但我更关心尝试复制将 char* 转换为 std::string)。但是下面的代码似乎没有将所有的 char* 复制到 std::string 中(这让我觉得有一个 \0 char* 中的字符,但它实际上不是结尾)。

char* a = GetEnvironmentStrings();
string b = string(a, sizeof(a));
printf( "%s", b.c_str() ); // prints =::=

有没有办法将 char* 复制到 std::string 中(我知道我可以使用 strcpy() 来复制将 const char* 转换为字符串而不是 char*)。

最佳答案

您不想在此上下文中使用 sizeof() - 您可以将值传递给构造函数。 char* 很容易变成 const char* 并且您也不想使用 strcpyprintf

这是针对传统 C 字符串的 - 然而 GetEnvironmentStrings() 返回的格式有点奇怪,您可能需要手动插入它。

const char* a = GetEnvironmentStrings();
int prev = 0;
std::vector<std::string> env_strings;
for(int i = 0; ; i++) {
if (a[i] == '\0') {
env_strings.push_back(std::string(a + prev, a + i));
prev = i;
if (a[i + 1] == '\0') {
break;
}
}
}
for(int i = 0; i < env_strings.size(); i++) {
std::cout << env_strings[i] << "\n";
}

关于c++ - 环境变量在 char* 中如何将其获取到 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6321756/

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