如何将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?
答案 0 :(得分: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;
}
答案 1 :(得分:2)
std::vector<char>
可通过撰写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;
答案 2 :(得分:1)
在STL中,保证向量在连续内存中布置其项目,如果vector<char> ip
为&ip[0]
,则可以通过获取第一个项目的地址来访问该内存。同样,对于vector<char> *pIp
,它应该是&(*pIp)[0]
。
您也可以使用&pIp->operator[](0)
推荐第一项,但我不会......: - )
但是,您不能使用pIp->begin()
引用第一项,因为此方案无法保证返回真实地址。