zoukankan      html  css  js  c++  java
  • vector<char*>输出的全是最后一个插入的数据的问题

    今天在写代码,声明了一个vector<char*>后,把字符串一个一个插入其中,但是最后输出的结果却是vector容器中存放的都是最后一个插入的数据。插入 10条数据,最后输出的是把最后一条数据输出了10次。这是为什么?

    有问题的代码如下:

    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {  
        vector<char*> vec;
        char st[2];
        st[0] = '1';
        for(int i=0; i<5; i++)
        {
            st[1] = func();
            vec.push_back(st);
        }
        for(int i = 0; i < vec.size(); i++)
        {
            cout << vec[i] <<endl;
        }
        return 0;
                
    }

    以上总共会插入5条数据到vector中,假如第5次插入的是 "12",那么输出的结果是把5个“12”.这是为什么呢?

    解答:这里我们只定义了一个st数组,也可以看成是一个字符指针类型,每次操作都是对指针所指的地址上存放的数据进行修改。而vector<char*>又是一个指针类型的,指向的都是st,虽然对st进行了5次插入操作,但是vec容器中的元素指向的都是同一个块地址,因此5个元素的值都会是一样的,且是最后一次修改的值。

    解决方案:

    不使用指针,使用string。vector<string> 存放的是一个string变量,每次会重新申请一块地址存放数据,不会出现以上的情况。

    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {  
        vector<sring> vec;
        char st[2];
        st[0] = '1';
        for(int i=0; i<5; i++)
        {
            st[1] = func();
            vec.push_back(st);
        }
        for(int i = 0; i < vec.size(); i++)
        {
            cout << vec[i] <<endl;
        }
        return 0;
                
    }
  • 相关阅读:
    Taro文件上传:Blob Url下载Blob对象本身并通过接口上传到服务器
    Taro项目遇到的问题
    RPC是什么?
    句柄
    正向代理和反向代理
    Go Micro搭建简单微服务
    gRPC奇怪的编译命令protoc
    官网下载Git方法
    Go/golang:解决依赖包模块安装问题
    URL
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/12616766.html
Copyright © 2011-2022 走看看