将vector <char> *传递给函数getnameinfo </char>

时间:2012-04-15 15:30:00

标签: c++ vector char pchar

如何将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?

3 个答案:

答案 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()引用第一项,因为此方案无法保证返回真实地址。