我有一些代码:
队列声明:
typedef deque<char*, allocator<char*> > CHARDEQUE;
typedef queue<char*,CHARDEQUE> CHARQUEUE;
CHARQUEUE p;
size_t size_q;
char recv_data[1024];
我使用udp套接字从远程机器接收数据:
这是循环:
while (1)
{
bytes_read = recvfrom(sock,recv_data,1024,0, (struct sockaddr *)&client_addr, &addr_len);
p.push(recv_data);
size_q=p.size();
printf("%d\n",size_q);
}
但问题是我无法将数据复制到我的队列中,这是我想要的,我可以指向它...可以帮助这个吗?
有关更多信息,我的程序正在接收原始数据,这就是我使用char数组的原因.. 任何想法如何解决这个问题?
答案 0 :(得分:2)
问题是你正在推送一个“char *”,它是指向你队列的指针,而不是实际的数据!
使用std::vector<char>
,如下(没有错误检查等 - 你应该做什么顺便。!):
std::deque<std::vector<char> > p;
std::vector<char> read_buff;
// per loop iteration
read_buff.resize(1024);
// read
bytes_read = recvfrom(sock,&read_buff[0], 1024,0, (struct sockaddr *)&client_addr, &addr_len);
// now resize to contents
read_buff.resize(bytes_read);
// push this
p.push_back(read_buff);