我有编程问题=)
std::vector<char*> Names;
if(MyPacket.ID == 3)
{Names.push_back(MyPacket.Buffer);}
我将接收到的缓冲区推送到这样的矢量上,但是当缓冲区发生变化时,矢量中该变量的值也会变化。
所以说我发送并将包含'Simon'的缓冲区推送到矢量上,这样就可以了,所以在矢量上的点[0]将是Simon这个词。
但是当我收到一个新的缓冲区时它会覆盖位置[0],即使数据包ID不同,也不会使用这个新缓冲区达到if语句中的断点。
我真的希望我能够解释得这么好,我试着向朋友们提出建议,然后他指着我这个网站。
任何帮助表示赞赏
David Andrews
答案 0 :(得分:4)
您正在向内存中的某些字符推送指针,如果此指针指向的区域发生变化,您将看到更改的值。如果你想复制缓冲区的值,你可以使用std :: string的向量而不是char *的向量。
例如:
std::vector<std::string> Names;
if(MyPacket.ID == 3) {Names.push_back(MyPacket.Buffer);}
if 缓冲区包含以null结尾的字符串。如果没有,你需要从某处获取缓冲区的长度,并从缓冲区到缓冲区+ len创建一个字符串。
答案 1 :(得分:0)
char * =指向char的地址。
我假设MyPackey.Buffer也是char *。
如果是,那么你将Buffer的地址推送到向量上,因此Buffer和Names [0]都具有相同的值(例如[0x10223943])。
你需要做一个memcopy或类似的东西,将内存地址MyPacket.Buffer中的值复制到新内存中,然后使用它。
简单示例http://www.cplusplus.com/reference/clibrary/cstring/memcpy/
希望这有帮助。
答案 2 :(得分:0)
std::vector<char*> Names;
不,不,不,不,不!拒绝吧!在一个小变量声明中,你所有的问题和更多的问题就在那里。让我为你解决这个问题:
std::vector<std::string> Names;
有。好多了。你可以告诉你的朋友和家人我刚刚挽救了你的生命。