gpt4 book ai didi

c++ - C++:遍历字符串 vector 并将索引用于putenv

转载 作者:行者123 更新时间:2023-12-02 09:55:34 26 4
gpt4 key购买 nike

我有一个字符串 vector ,它是通过分析配置文件创建的。所有字符串应采用key=value格式。我想遍历 vector ,并使用putenv函数将环境变量设置为键值对。

编码:

for(auto it = settings.begin(); it != settings.end(); it++) {
try {
auto i = it - settings.begin();
cout << i << endl;
putenv(settings.at(i));
} catch (...) {
cout << "Config is not in the format key=value ... please correct" << endl;
}
}

这将引发错误:
cannot convert ‘__gnu_cxx::__alloc_traits<std::allocator<std::basic_string<char> > >::value_type {aka std::basic_string<char>}’ to ‘char*’ for argument ‘1’ to ‘int putenv(char*)’


我是C++的新手,所有这些变量类型和指针都使我感到困惑。

最佳答案

您正在混合使用C和C++的东西。

  • 您的 vector 包含C++字符串std::string
  • putenv是一个“旧”函数,需要一个指向char缓冲区(即C字符串)的指针。

  • 幸运的是 std::string makes it easy to get one of those:
    putenv(settings.at(i).c_str());
    // ^^^^^^^^

    但是,那里仍然存在问题。 putenv拥有您提供的缓冲区的“所有权”,并希望它可以持续“永远”。你不会的直到 std::string被修改或销毁为止。还不够好!

    按照惯例,我们在这里使用C的 strdup分配 char缓冲区的副本。然后是 putenv(或操作系统)的责任,以后再释放它。
    putenv(strdup(settings.at(i).c_str()));
    // ^^^^^^^ ^

    由于 putenv不在C或C++标准中,而是由POSIX提供的,因此您应检查操作系统的手册页,以确保正确使用它。

    关于c++ - C++:遍历字符串 vector 并将索引用于putenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60422958/

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