使用 std::vector::insert 将字符串插入 uint8_t 向量中,将随机数据放入其中

问题描述 投票:0回答:1

我正在将数据序列化为 uint8_t 向量以将其发送到另一个模块,我有一个从函数返回的字符串

getVal()
,当我执行 vector.insert() 时,它会在我的向量中显示更多随机值。


std::string getVal() 
{
    std::string x = "564";
    return x ; 
}

int main() 
{ 
    std::vector<uint8_t> data {0x70}; 

    data.insert(data.end(),getVal().begin(),getVal().end());

    for (auto i:data)
        std::cout << i <<std::endl; 
    
    std::cout<<data.size()<<std::endl;
    std::cout << getVal() <<" ,type: "<< sizeof(getVal()) << ", .size(): "<< getVal().size()<<std::endl; 


    return 0; 
}

感谢您的帮助。

解决方案是循环字符串并使用 .push_back(),但我需要理解为什么 .insert() 会发生这种情况

c++ string std stdvector
1个回答
1
投票

因为

getVal
按值返回,两次调用会返回两个不同且不相关的
std::string
对象。

这些对象的

begin
end
迭代器将与不同的对象相关,并且将它们一起使用将导致未定义的行为

您需要创建一个静态字符串,并返回对其的引用。或者您需要存储

getVal
返回的字符串并使用该对象。

© www.soinside.com 2019 - 2024. All rights reserved.