我有一些代码:
队列声明:
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);
}
但问题是队列的大小不会增长它总是一样的,这就是我在屏幕上看到的
0
40
40
40
40
40
...
有关更多信息,我的程序正在接收原始数据,这就是我使用char数组的原因.. 任何想法如何解决这个问题?
答案 0 :(得分:1)
sizeof
在编译时确定。你的意思可能是p.size()
。
答案 1 :(得分:0)
sizeof(p)
不会返回队列中的元素数量!它是一个编译时构造,它返回CHARQUEUE
类型占用的字节数:sizeof(p)
总是给你相同的结果。
您需要的是:
std::cout << p.size() << std::endl;
用另一个例子来说明这一点:const char *s = "Something";
是一个指向空终止字符串的指针,而sizeof(s)
(相当于sizeof(const char *)
)与实际长度无关字符串strlen(s)
(在本例中为9)。
答案 2 :(得分:0)
另一个问题,除了sizeof / p.size()之外,p.push(recv_data)正在将recv_data缓冲区的地址推入队列,而不是数据本身