将变量推入向量时,向量中该点的值会在变量出现时发生变化

时间:2011-01-15 00:34:08

标签: c++ networking vector push

我有编程问题=)

 std::vector<char*> Names;

if(MyPacket.ID == 3) {Names.push_back(MyPacket.Buffer);}

我将接收到的缓冲区推送到这样的矢量上,但是当缓冲区发生变化时,矢量中该变量的值也会变化。

所以说我发送并将包含'Simon'的缓冲区推送到矢量上,这样就可以了,所以在矢量上的点[0]将是Simon这个词。

但是当我收到一个新的缓冲区时它会覆盖位置[0],即使数据包ID不同,也不会使用这个新缓冲区达到if语句中的断点。

我真的希望我能够解释得这么好,我试着向朋友们提出建议,然后他指着我这个网站。

任何帮助表示赞赏

David Andrews

3 个答案:

答案 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;

有。好多了。你可以告诉你的朋友和家人我刚刚挽救了你的生命。