c ++ vector <char>和套接字

Chr*_*tka 4 c++ sockets vector

有没有办法在向量中调用send/recv传递?

在c ++中缓冲套接字数据的好习惯是什么?例如:读取直到\ r \n或直到upper_bound(4096字节)

sbi*_*sbi 10

std::vector<char> b(100); 
send(z,&b[0],b.size(),0);
Run Code Online (Sandbox Code Playgroud)

编辑:我第二次是本·海默斯和我22的评论.另外,请参阅此答案,了解不尝试访问空向量中第一个元素的通用实现.


Ben*_*ers 6

为了扩展sbi所说的内容,std :: vector保证与C风格的数组具有相同的内存布局.因此,您可以使用&myVector [0](第0个元素的地址)作为数组起始地址,并且可以安全地使用此数组的myVector.size()元素.请记住,一旦您下次修改向量,这些都会失效!

  • 为了澄清Ben所说的,一旦修改了向量本身,它就会失效,而不是向量的内容.换句话说,如果您使向量重新分配其内容,则从&v [0]返回的地址无效. (3认同)

me2*_*e22 6

需要注意的一件事:&v [0]在技术上是不允许的,如果向量为空,并且某些实现将断言,所以如果你从其他人获得缓冲区,请确保它们在使用此技巧之前不是空的.

C++ 0x的vector有一个.data()成员函数(比如std :: string),可以避免这个问题并使事情变得更清晰.