0

如何将 vector* 类型的变量传递给 winsock2 的 getnameinfo 函数?

GetSocketIPAndPort( struct sockaddr* ss, vector<char>* pIP, uint16_t* nPort )
{
    if (status = getnameinfo((sockaddr*)sin,sizeof(sin),pIP,sizeof(*ptr),0,0,NI_NUMERICHOST))       
    {
        return status;      
    }
}

面对面最好问一下如何将vector*转换为PCHAR?

4

3 回答 3

3

使用vector::data成员函数,它返回一个指向底层数组的指针:

GetSocketIPAndPort( struct sockaddr* ss, vector<char>* pIP, uint16_t* nPort )
{
    if (status = getnameinfo((sockaddr*)sin,sizeof(sin),pIP->data(),sizeof(*ptr),0,0,NI_NUMERICHOST))       
        return status;      
}
于 2012-04-15T15:53:03.587 回答
2

a可以通过写入std::vector<char>安全地转换为 a - 例如char*&my_vector[0]

std::string fred("hello");
std::vector<char> meow(fred.begin(), fred.end());
meow.push_back('\0');
char* buffer = &meow[0];
std::cout << buffer << std::endl;
于 2012-04-15T15:41:01.393 回答
1

在 STL 中,它保证向量在连续内存中布局其项目,您可以通过获取第一项的地址来访问它,如果vector<char> ip它是&ip[0]. 同样的方式,因为vector<char> *pIp它应该是&(*pIp)[0]

您也可以使用 引用第一项&pIp->operator[](0),但我不会 .. :-)

但是,您不能使用 引用第一项pIp->begin(),因为该方案不能保证返回真实地址。

于 2012-04-15T15:45:49.177 回答