小编Chu*_* Xu的帖子

为什么 std::string 在循环内的同一地址存储内容?

我需要动态创建一个 char[] 。我想使用 std::string 而不是直接处理 char[],因为我不需要使用 std::string 来处理内存管理。这是我的示例代码:

int main()
{
    std::vector<char*> char_vec;
    for(size_t i = 0; i < 10; i++)
    {
        std::string s;
        s = "test" + std::to_string(i);
        char_vec.push_back(const_cast<char*>(s.c_str()));
    }

    for(auto& ele : char_vec)
    {
        std::cout << ele << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是: 在此输入图像描述,这不是我想要的。

以我的理解,循环内部创建的字符串在每次迭代中都应该是全新的,但实际上,所有字符串都使用相同的地址来存储内容。为什么会出现这种情况?我应该如何修改我的代码以实现我的目标?

感谢您的所有帮助!


2023年1月10日更新:

我根据答案尝试了以下代码:

int main()
{
    std::vector<char*> char_vec;
    std::vector<std::string> str_vec;
    for(size_t i = 0; i < 10; i++)
    {
        // str_vec.emplace_back("test" + std::to_string(i));
        str_vec.push_back("test" + std::to_string(i));
        char_vec.push_back(const_cast<char*>(str_vec.back().c_str()));
    }

    for(auto& ele : char_vec)
    {
        std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ std char stdstring

0
推荐指数
1
解决办法
125
查看次数

标签 统计

c++ ×1

char ×1

std ×1

stdstring ×1