我有一个UDP服务器,它在缓冲区中获取消息,我想像邮箱一样存储.为此,我想创建一个可以保存这些传入消息的向量或映射,但是我的map或vector的值始终指向缓冲区的当前值.
如何将值正确存储在地图或矢量中?
为了演示我的问题,我编写了一个简单的静态示例来表示我的脚本中发生的事情:
#include <map>
#include <iostream>
int main(int argc, char const *argv[])
{
char buffer[65535];
std::map<int, char *> messages;
buffer = {'h','e','l','l','o'};
messages[0] = buffer;
buffer = {'h','o','w'};
messages[1] = buffer;
buffer = {'a','r','e'};
messages[2] = buffer;
buffer = {'y','o','u'};
messages[3] = buffer;
std::cout << messages[0] << std::endl;
std::cout << messages[1] << std::endl;
std::cout << messages[2] << std::endl;
std::cout << messages[3] << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
you
you
you
you
Run Code Online (Sandbox Code Playgroud)
但我想得到:
hello
how
are
you
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?
如果用std::map<int, char *>第二个成员声明你的地图只是一个指向a的指针char.
在你的代码中,这个指针指向char你的第一个,你buffer在你的几次添加它,map因此你得到相同的结果.
如果你想保留你的地图,char*你必须为你要添加的每个条目分配一些内存,最后释放它.
我建议您在更换char *由std::string和操作将是方式更简单,作为一个例子:
#include <map>
#include <string>
#include <iostream>
std::map<int, std::string> messages;
messages[0] = "hello";
messages[1] = "how";
messages[2] = "are";
messages[3] = "you";
std::cout << messages[0] << std::endl;
std::cout << messages[1] << std::endl;
std::cout << messages[2] << std::endl;
std::cout << messages[3] << std::endl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
413 次 |
| 最近记录: |