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基になる配列へのポインタを返すmember関数を使用します。

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 に答える